zoukankan      html  css  js  c++  java
  • 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的值

  • 相关阅读:
    决定迁移过来,深耕于此。。。
    一篇搞定MongoDB
    一篇搞定vue请求和跨域
    自定义全局组件
    一篇搞定vue-router
    一篇搞定Vuex
    vue系列
    .Vue.js大全
    一篇搞定spring Jpa操作数据库
    自定义admin
  • 原文地址:https://www.cnblogs.com/hughes5135/p/10201223.html
Copyright © 2011-2022 走看看