以前写过一篇redux的教程 能够参考redux的教程html
本篇讲经过通俗易懂的方式让你快速上手mobx 的基本使用,虽然已经能够知足大部分开发中的需求可是详细 请参考中文官方文档react
本篇配教程代码 github.com/Chad97/mobx…webpack
若是对想要快速入门的你有所帮助请给点个小小的start吧~git
咱们先来简单的看下官网的介绍github
MobX 是一个通过战火洗礼的库,它经过透明的函数响应式编程(transparently applying functional reactive programming - TFRP)使得状态管理变得简单和可扩展。MobX背后的哲学很简单:web
其实你能够简单的理解成 mobx是一个excel的计算表格 编程
observable, autorun, computed, action, configure —— mobx observer —— mobx-reactjson
由于本篇通篇使用ES7中的修饰器语法@,因此须要配置bable,推荐使用 固然你也可使用 decorators 为参考redux
安装 yarn add mobx mobx-react
babel
启用修饰器 babel 支持ES7中的修饰器语法@
yarn add babel-plugin-transform-decorators-legacy --dev
yarn add @babel/plugin-proposal-decorators
配置webpack
"babel": {
"plugins": [
[
"@babel/plugin-proposal-decorators",
{
"legacy": true
}
],
[
"@babel/plugin-proposal-class-properties",
{
"loose": true
}
]
],
"presets": [
"react-app"
]
}
复制代码
在全局文件下建立一个state.js
ps 别问我为啥不叫store 由于我喜欢 以下
import { observable, autorun, computed, action, configure} from "mobx"
configure(true)//开启严格模式
class MyState {
@observable num1 = 0;
@observable num2 = 100;
@action addNum1 = () => {
this.num1 ++;
}
@action addNum2 = () => {
this.num2 ++;
}
@action empty = () => {
this.num1 = 0
this.num2 = 0
}
@computed get total() {
return this.num1 + this.num2;
}
}
const newState = new MyState();
export default newState
复制代码
addNum1 addNum2 empty
total
newState
而且导出了若是你用过redux 那这里对应你来讲 简直不要太简单,只不过mobx 更加面向对象
建立 一个父组件 Mobx.jsx
import React from 'react';
import { observer } from 'mobx-react';
import newState from './state'
import AllNum from './child/AllNum'
import Main from './child/Main'
@observer
class Mobx extends React.Component {
constructor(props) {
super(props);
this.state = {
};
}
render() {
return (
<>
<AllNum store={newState} />
<br /><hr />
<Main store={newState} />
<br /><hr />
<button onClick={newState.empty}>清零</button>
</>
);
}
}
export default Mobx;
复制代码
newState
经过 empty 触发 actionAllNum.jsx
import React from 'react';
import { observer } from "mobx-react"
const AllNum = observer((props) => <div>num1 + num2 = {props.store.total}</div>);
export default AllNum
复制代码
Main.jsx
import React from 'react';
import { observer } from 'mobx-react';
const Main = observer((props) => (
<div> <p>num1 = {props.store.num1}</p> <p>num2 = {props.store.num2}</p> <div> <button style={{marginRight:'5em'}} onClick={props.store.addNum1}>num1 + 1</button> <button onClick={props.store.addNum2}>num2 + 1</button> </div> </div>
));
export default Main
复制代码
newState
固然若是你的组件签到太深,以为 上面2中方式太麻烦你也可使用 react Context
来传递 newState,这里就很少作概述,具体参考
贴一张官方的图
redux教程连接 juejin.im/post/5cc1ac…
最后 你们能够 clone 个人deom 教程做为参考哦~ github.com/Chad97/mobx… 喜欢的 大爷点个star 哦~