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 ...
随机推荐
- Catch That Cow POJ - 3278 bfs map超时,短路判断顺序。
题意:可以把n边为n+1,n-1,n*2问从n到k的最少变化次数. 坑:标题写了.有点不会写bfs了... ac代码 #define _CRT_SECURE_NO_WARNINGS #include& ...
- HQL之动态分区调整
动态分区插入可以基于查询语句分出出要插入的分区名称.比如,下面向分区表插入数据的SQL: insert into table chavin.emp_pat partition(dname,loc) s ...
- vim操作表
- Java代理和动态代理机制分析和应用
本博文中项目代码已开源下载地址:GitHub Java代理和动态代理机制分析和应用 概述 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息 ...
- Flink – JobManager.submitJob
JobManager作为actor, case SubmitJob(jobGraph, listeningBehaviour) => val client = sender() val jobI ...
- html5页面与android页面之间通过url传递参数
html5页面与android页面之间可以通过url传递参数,android将参数放在htm5的url ?后面,js获取url ?号后面的参数. 方法一: <scrīpt> /* 用途 ...
- websocketd
https://www.cnblogs.com/tinywan/p/6826125.html https://www.jianshu.com/p/63afd0099565
- Linux下Zookeeper的安装
Linux下Zookeeper的安装 安装环境: Linux:centos6.4 Jdk:1.7以上版本 Zookeeper是java开发的可以运行在windows.linux环境.需要先安装jdk. ...
- 获取APP和设备相关信息
APP NAME: [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"] APP ...
- win10安装pycharm及汉化包
PyCharm 是一款功能强大的 Python 编辑器,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,那么如何安装pycharm呢?都是英文看不懂有没有汉化版呢?跟ytkah一起 ...