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