• mobx 的学习


    1.初始化项目

    第一步用create-react-app初始化一个项目,并打开webpack配置项

    npx create-react-app react-mobx-demo
    
    cd react-mobx-demo
    
    npm run eject 

    2.配置支持修饰符

    目前初始化的项目是不支持修饰符的,安装相关依赖

    cnpm install --save-dev @babel/plugin-proposal-decorators 
    cnpm install --save-dev @babel/plugin-proposal-class-properties 

     

    上面安装好之后,找到项目中package.json文件修改如下

    "babel": {
     // 新增
     "plugins": [
     [
     "@babel/plugin-proposal-decorators",
     {
     "legacy": true
     }
     ],
     [
     "@babel/plugin-proposal-class-properties",
     {
     "loose": true
     }
     ]
     ],
     "presets": [
     "react-app"
     ]
     }, 

     

    找到babel添加plugins就可以了’

    3.安装antd和mobx

    这一步没有什么特别,安装就行

    yarn add antd
    yarn add mobx
    yarn add mobx-react

    4.开发stroe,完整的代码
    import {action, computed, observable} from "mobx";
    import moment from 'moment';
    class  Appstore {
    
        @observable time ="2020";
        @observable todos=[];
    
        @action add(n){
           this.todos.push(n)
        };
        @action del(){
            this.todos.pop()
        };
        @action reset(){
            this.todos=[]
        };
        @action getNOW(){
            this.time=moment().format('YYYY-MM-DD HH:mm:ss')
        }
        @computed get desc(){
            return `${this.time} 还有 ${this.todos.length}任务没有完成`;
        }
    }
    
    const zero= new Appstore ();
    setInterval(()=>{
        zero.getNOW();
    },1000)
    export  default  zero;
    

      5.开发HomePage 组件

    import React, {Component} from 'react';
    import {inject, observer} from "mobx-react";
    
    @inject('zero') @observer
    class PageHome extends Component {
        constructor(props){
            super(props);
            this.state={
    
            }
    
        }
        handerBtn(type){
            let {zero} =this.props;
            switch (type) {
               case  'add':
                   zero.add("新加数据");
                   break;
               case  'del':
                   zero.del();
                   break;
               case  'reset':
                    zero.reset();
                   break;
               default:
    
           }
        }
        render() {
            let {zero} =this.props;
            return (
                <div className='home'>
                 <h1>在React中使用MOBX</h1>
                  <div> {zero.desc}</div>
                    <button onClick={this.handerBtn.bind(this,'add')}>添加</button>
                    <button onClick={this.handerBtn.bind(this,'del')}>删除</button>
                    <button onClick={this.handerBtn.bind(this,'reset')}>重置</button>
                    <div>
    
                        {
                            zero.todos.map((ele,index,arr)=>{
                                return(
                                    <div key={index}>
                                        {ele}
                                    </div>
                                )
                            })
    
                        }
                    </div>
                </div>
            );
        }
    }
    
    export default PageHome;

    6.Index.js 组件

    import React from 'react'
    import ReactDOM from 'react-dom'
    import App from './App'
    import 'antd/dist/antd.css'
    import { Provider } from 'mobx-react'
    import store from './mobx'
    import zero from './mobx/zero'
    import Home from './PageHome'
    ReactDOM.render(
           <Provider store={store}>
              <App/>
              <Home zero={zero} ></Home>
           </Provider>,
    
      document.getElementById('root'))




    参考文章

    https://zhuanlan.zhihu.com/p/150825843?from_voters_page=true

    https://blog.csdn.net/qq_36380426/article/details/102738902

    https://cn.mobx.js.org/

    https://zhuanlan.zhihu.com/p/138820812

  • 相关阅读:
    Enum, Generic and Templates
    Writing A Threadpool in Rust
    A First Look at Rust Language
    Closures in OOC
    Complexity Behind Closure
    Introduction to OOC Programming Language
    OOC,泛型,糟糕的设计。
    Enlightenment笔记
    Machine Learning/Random Projection
    Machine Learning/Introducing Logistic Function
  • 原文地址:https://www.cnblogs.com/aibabel/p/13267643.html
Copyright © 2020-2023  润新知