React项目中使用Mobx状态管理(一)
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状态管理(一)的更多相关文章
- React项目中使用Mobx状态管理(二)
并上一节使用的是普通的数据状态管理,不过官方推荐使用装饰器模式,而在默认的react项目中是不支持装饰器的,需要手动启用. 官方参考 一.添加配置 官方提供了四种方法, 方法一.使用TypeScrip ...
- 在react项目中启用mobx的配置方法
1.安装插件 npm install --save-dev babel-preset-mobx mobx mobx-react 2.package.json配置 "dependencies& ...
- react项目中实现搜索关键字呈现高亮状态(一)
最近有个需求,在一个react项目中,实现搜索关键字呈现高亮状态.这个在普通的html文件中还好操作些,在react项目中有点懵逼了,因为react项目中很少操作dom,有点无从下手.但最后还是实现了 ...
- mobx状态管理快速入门
1.mobx状态管理 安装: creact-react-app mobx
- 如何在非 React 项目中使用 Redux
本文作者:胡子大哈 原文链接:https://scriptoj.com/topic/178/如何在非-react-项目中使用-redux 转载请注明出处,保留原文链接和作者信息. 目录 1.前言 2. ...
- 如何优雅地在React项目中使用Redux
前言 或许你当前的项目还没有到应用Redux的程度,但提前了解一下也没有坏处,本文不会安利大家使用Redux 概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与 ...
- 优雅的在React项目中使用Redux
概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与React没有任何关系,其他UI框架也可以使用Redux react-redux React插件,作用:方便在 ...
- 了解CSS in JS(JSS)以及在React项目中配置并使用JSS
目录 认识JSS 什么是JSS JSS 的常见实现 JSS 的好处与坏处 好处 坏处 使用模块化CSS实现JSS 安装插件 在React项目中的tsconfig.json中添加配置 vscode项目中 ...
- react项目中实现元素的拖动和缩放实例
在react项目中实现此功能可借助 react-rnd 库,文档地址:https://github.com/bokuweb/react-rnd#Screenshot .下面是实例运用: import ...
随机推荐
- JS弹出对话框的三种方式
JS弹出对话框的三种方式 我们用到了alert()方法.prompt()方法.prompt()方法,都是在网页有一个弹出框,那么就让我们探究一下他们之间的区别: 一.第一种:alert()方法 < ...
- role="navigation"
HTML5的标签属性,可以用于标识一个普通的标签,使之语义化,方便浏览器对其具体功能进行识别. 例如div容器制作的导航栏,加上role="navigation",就可以让浏览器知 ...
- Django:管理站点
1.自定义管理页面 自定义管理界面需要创建一个类,继承admin.ModelAdmin booktest/admin.py class BookInfoAdmin(admin.ModelAdmin): ...
- lame音频编码注意的点
1.注意每次编码的PCM数据不能太短,如果太短编码函数长期返回-1这样的错误,将导致编码器彻底失效程序奔溃的问题,经测试32000在3200下稳定,大概1/10码率是没有问题的,具体请自行查询或调试 ...
- 网络层block,delegate之优劣分析
正常情况下, block 缺点: 1.block很难追踪,难以维护 2.block会延长先关对象的生命周期 block会给内部所有的对象引用计数+1, 一方面会带来潜在的循环引用(retain cyc ...
- [filesystem][archlinux][disk encryption][btrfs] btrfs
fork from here http://www.cnblogs.com/hugetong/p/6914248.html boot分区,MBR加密:https://wiki.archlinux.or ...
- [X][xrandr][archlinux] 手动调整显示器分辨率
有一些时候,电脑并不能正确的识别出显示器的最大分辨率,这有可能是软件的原因,硬件的原因,显示器的原因,VGA线的原因等其他原因. 我遇到的情况,是开机时候连着VGA的话,就可以正确识别.如果使用中间进 ...
- MAC终端TAB自动补全忽略大小写
打开终端,输入: nano .inputrc 在里面粘贴上以下语句: set completion-ignore-case onset show-all-if-ambiguous onTAB: men ...
- python time模块总结
常用函数: import time --------------------------------------------------time.time() ...
- Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...