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的值

相关文章

react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接...
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc ...