以前寫過一篇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 mobx 的方式人更容易理解是使用 面向對象的方式也讓人用起來 不用寫許多許多 render 感受噁心redux教程連接 juejin.im/post/5cc1ac…
最後 你們能夠 clone 個人deom 教程做爲參考哦~ github.com/Chad97/mobx… 喜歡的 大爺點個star 哦~