mobx仓库

作者: divcssjs | 来源:发表于2019-07-23 17:17 被阅读3次

react之创建mobx仓库

第一步:创建仓库的js文件 目录结构 src/mobx/index.js

import { observable, action } from "mobx";//引入对应的包
//创建class类仓库  Store仓库名随便起
class Store {
    @observable  //observable的意思是被观测 简单说就是【被观察者】被动
    //开始放数据
    data = 'mobx测试';
    msg = 555;

    // @action.bound  this指向到当前类

  //action 声明他 下面的方法就可以被使用
    @action
    setData = function (val) {
        this.data = val
    }
    setMsg = (msg) => {
        this.msg = msg
    }
}

export default new Store();

第二部:很熟悉的组件创建 只是引入了mobx仓库 和一个mobx.js的子组件 【当前的组件算是父组件】Mobx.js组件 目录结构 src/page/Mobx.js

import React, { Component } from 'react';
import Mymbox from "../component/mobx";
import testStore from "../mobx";

class Mobx extends Component {
    constructor(props) {
        super(props);
        this.state = {  };
    }
    render() {
        return (
            <div>
                  //自定义传属性  传下去  很像redux  不过mobx的属性名可以自定义 随便改名
                <Mymbox testStore={testStore}></Mymbox >
            </div>
        );
    }
}

export default Mobx;

第三部:子组件mobx.js 目录结构 src/component/mobx.js

observer是观察者 主动 定义后 就可以连接mobx仓库
在触发的事件里使用 this.props.testStore.setData(555)
this.props.仓库名.仓库里的方法名(参数) 触发
仓库名是父组件引入仓库的时候的名字

import React, { Component } from 'react';
import { observer } from "mobx-react";

@observer
class Mobx extends Component {
    constructor(props) {
        super(props);
        this.state = {};
    }
    render() {
        console.log(this.props)
        return (
            <div>
                <p>{this.props.testStore.data}</p>
                <button onClick={() => this.yes()}>setData</button>
                <br />
                <button onClick={() => this.msg()}>setMsg</button>
            </div>
        );
    }
    // 修改mobx仓库数据
    yes() {
        this.props.testStore.setData(555)
    }
    msg() {
        this.props.testStore.setMsg('new msg 666')
    }
}

export default Mobx;

可以在github下载实验 https://github.com/divcssjs/react_sx_elm
这个是正在练习的 饿了吗 的一个移动页面 在内部练习了好多常用的技术
有react的hook , scrollToElement , mobx等

使用VScode编辑器时不支持es7语法 设置中 属性设置对勾

javascript.implicitProjectConfig.experimentalDecorators

本文原创divcssjs

相关文章

网友评论

    本文标题:mobx仓库

    本文链接:https://www.haomeiwen.com/subject/wmealctx.html