1、安装

 $ yarn add mobx mobx-react

2、新建store/index.js,存放数据(以下思路仅限于父子组件的简单应用)

  注意:这里暂时没使用装饰器@observable,装饰器和全局数据见下一节

 import { observable, action } from 'mobx'

  // 观察器(状态)
const appState = observable({
timer: 100
})
  // 方法
appState.resetTimer = action(() => {
appState.timer = 0
})
// 方法
appState.increase = action(() => {
console.log('increase')
appState.timer += 1;
}) export default appState;

3、回到根组件(父组件)App,引入appState并传入属性

 import React from 'react';
import appState from './store'; // 添加
import TodoList from "./components/TodoList"; export default class App extends React.Component {
render() {
return (
<div className='app'>
<Child appState={appState}/> // 添加
</div>
)
}
}

4、切换到子组件

 import React, {Component} from 'react';
import { observer } from 'mobx-react'; class Child extends Component { constructor(props) {
super(props);
}
// 该绑定方式属于ES7,需要安装babel-preset-stage-2, 并添加到.babelrc中
_resetTimer = ()=> {
this.props.appState.resetTimer() // 对应appState中action的resetTimer方法
}
_increase = () => {
this.props.appState.increase()   // 对应appState中action的increase方法
}
render() {
return (
<div>
<h2>Child Component</h2>
<p>{this.props.appState.timer}</p>
<button onClick={this._resetTimer}>复位</button>
<button onClick={this._increase}>增加</button>
</div>
);
}
} 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项目中使用Mobx状态管理(一)的更多相关文章

  1. React项目中使用Mobx状态管理(二)

    并上一节使用的是普通的数据状态管理,不过官方推荐使用装饰器模式,而在默认的react项目中是不支持装饰器的,需要手动启用. 官方参考 一.添加配置 官方提供了四种方法, 方法一.使用TypeScrip ...

  2. 在react项目中启用mobx的配置方法

    1.安装插件 npm install --save-dev babel-preset-mobx mobx mobx-react 2.package.json配置 "dependencies& ...

  3. react项目中实现搜索关键字呈现高亮状态(一)

    最近有个需求,在一个react项目中,实现搜索关键字呈现高亮状态.这个在普通的html文件中还好操作些,在react项目中有点懵逼了,因为react项目中很少操作dom,有点无从下手.但最后还是实现了 ...

  4. mobx状态管理快速入门

    1.mobx状态管理   安装: creact-react-app mobx  

  5. 如何在非 React 项目中使用 Redux

    本文作者:胡子大哈 原文链接:https://scriptoj.com/topic/178/如何在非-react-项目中使用-redux 转载请注明出处,保留原文链接和作者信息. 目录 1.前言 2. ...

  6. 如何优雅地在React项目中使用Redux

    前言 或许你当前的项目还没有到应用Redux的程度,但提前了解一下也没有坏处,本文不会安利大家使用Redux 概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与 ...

  7. 优雅的在React项目中使用Redux

    概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与React没有任何关系,其他UI框架也可以使用Redux react-redux React插件,作用:方便在 ...

  8. 了解CSS in JS(JSS)以及在React项目中配置并使用JSS

    目录 认识JSS 什么是JSS JSS 的常见实现 JSS 的好处与坏处 好处 坏处 使用模块化CSS实现JSS 安装插件 在React项目中的tsconfig.json中添加配置 vscode项目中 ...

  9. react项目中实现元素的拖动和缩放实例

    在react项目中实现此功能可借助 react-rnd 库,文档地址:https://github.com/bokuweb/react-rnd#Screenshot .下面是实例运用: import ...

随机推荐

  1. 在ubuntu系统中,python依赖存放的路径

    你在使用python,之后你想给python安装一些第三方库,如tensorflow或者tensorrt,那么这些包存放在哪个路径下呢? 该目录下: /usr/local/lib/python3.5/ ...

  2. 若父设置了overflow: hidden;子如何不受影响

    若父设置了overflow: hidden;子如何不受影响 1.如图: 2.只需要给一个position: absolute;定位 3.相当于重新给页面进行定位,右侧便会有滚动条出现. 4.overf ...

  3. XPC connection interrupted

    用Analysis 静态分析代码,发现了一些问题,修改之后,然后用Instrument -> Leaks对内存做动态分析,发现一个错误: 控制台报错:XPC connection interru ...

  4. C语言保证,0永远不是有效的数据地址,因此,返回址0可用来表示发生的异常事件

    C语言保证,0永远不是有效的数据地址,因此,返回址0可用来表示发生的异常事件

  5. Ubuntu 18.04 安装中文输入法ibus

    在安装ubuntu时,如果选择英文安装默认会不启用中文输入法的.可以通过下述方法开启 安装 pingyin 输入法 sudo apt-get install ibus-pinyin 然后在 setti ...

  6. eclipse中tomcat无法加载spring boot

    转自: http://blog.csdn.net/u010797575/article/details/50517777 最近搭建一套spring boot框架,作为 application 启动项目 ...

  7. Python开发【模块】:aiohttp(二)

    AIOHTTP 1.文件上传 ① 单个文件上传 服务端 async def post(self, request): reader = await request.multipart() # /!\ ...

  8. Automation服务器不能创建对象(金税盘)

    1. 安装防伪开票组件接口软件: 2. 把接口的注册文件放到%防伪开票系统的安装目录% \BIN下 3. 把%防伪开票系统的安装目录%\bin下的TaxCardX.dll文件复制至 c:\window ...

  9. 内核ipc机制

    内核版本:linux2.6.22.6 硬件平台:JZ2440 驱动源码 block_ipc_poll_key_int_drv.c : #include <linux/module.h> # ...

  10. 使用github的srs代码,搭建 RTMP_Server

    1. 搭建RTMP服务器 1> 获取开源代码SRS. git clone https://github.com/ossrs/srs 下载源码后,按照如下文档安装https://github.co ...