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://zhuanlan.zhihu.com/p/138820812

浙公网安备 33010602011771号