React項目中使用Mobx狀態管理(一)


1、安裝

1 $ yarn add mobx mobx-react

 

2、新建store/index.js,存放數據(以下思路僅限於父子組件的簡單應用)

  注意:這里暫時沒使用裝飾器@observable,裝飾器和全局數據見下一節

 1 import { observable, action } from 'mobx'
 2 
  // 觀察器(狀態) 3 const appState = observable({ 4 timer: 100 5 })
  // 方法
6 appState.resetTimer = action(() => { 7 appState.timer = 0 8 }) 9 // 方法 10 appState.increase = action(() => { 11 console.log('increase') 12 appState.timer += 1; 13 }) 14 15 export default appState;

 

3、回到根組件(父組件)App,引入appState並傳入屬性

 1 import React from 'react';
 2 import appState from './store';   // 添加
 3 import TodoList from "./components/TodoList";
 4 
 5 export default class App extends React.Component {
 6   render() {
 7     return (
 8       <div className='app'>
 9         <Child appState={appState}/>   // 添加
10       </div>
11     )
12   }
13 }

 

4、切換到子組件

 1 import React, {Component} from 'react';
 2 import { observer } from 'mobx-react';
 3 
 4 class Child extends Component {
 5 
 6   constructor(props) {
 7     super(props);
 8   }
 9   // 該綁定方式屬於ES7,需要安裝babel-preset-stage-2, 並添加到.babelrc中
10   _resetTimer = ()=> {
11     this.props.appState.resetTimer()    // 對應appState中action的resetTimer方法
12   }
13   _increase = () => {
14     this.props.appState.increase()    // 對應appState中action的increase方法
15   }
16   render() {
17     return (
18       <div>
19         <h2>Child Component</h2>
20         <p>{this.props.appState.timer}</p>
21         <button onClick={this._resetTimer}>復位</button>
22         <button onClick={this._increase}>增加</button>
23       </div>
24     );
25   }
26 }
27 
28 export default observer(Child);    // 非裝飾器的普通方式, 將組件傳入observer觀察器中,否則store接受不到組件的事件

 

以上是Mobx最簡單的使用方法,官方推薦使用裝飾器模式。Mobx就類似Vuex, 需要state和action即可完成一個簡單的狀態管理

大概思路:

1 . 在store中聲明狀態(state)和方法(action) 分別使用Mobx的observer和action封裝

2. 在父組件中導入state並屬性傳給子組件

3 .子組件通過props接收state, 在自定義的方法中調用store的方法,使store內的方法去改變state的值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM