对于各种spa页面或者各种前端页面的话,不拿一个状态管理工具如何完美地实现你的项目逻辑控制呢
困扰于Redux的繁琐,mobx便横空出世了,为了简单你的状态管理而生
做到完美状态管理,你只需要以下几步
关于装饰器的编译,请看我另一篇博客:React + 装饰器
安装 mobx mobx-react
npm install mobx --save npm install mobx-react --save
写一个store文件
observable: 观察对应的数据
import { observable } from "mobx";
class TodoList {
// 利用
@observable todos = []
}
export default new TodoList()
在对应的页面添加引用
index页面
import TodoList from './store/TodoList'
<App todoList ={TodoList}>
app页面
export default App {
render() {
<div>todoList的lenth是{this.props.todoList.length}</div>
}
}
到这里为止你就能拿到store的数据了,超级简单!
页面跟着store的数据改变发生改变
app.js页面添加观察
import { observable } from 'mobx-react'
@observable // 给这个页面添加observable装饰器
export default App {
render() {
<div>todoList的lenth是{this.props.todoList.length}</div>
}
}
添加了observable的页面会根据注入的数据发生改变而重新渲染
Action
这里我们给todoList添加一个事件
import { observable, action } from "mobx";
class TodoList {
// 利用
@observable todos = []
@action push() {
this.todos.push({
id: 1,
name: 'new Task'
})
}
}
export default new TodoList()
我们在app添加一个btn
<button onClick={() => this.props.todoList.push}>点我添</button>
点击按钮的时候,我们可以对应看到文本的长度在发生改变
computeds
计算一些对应的属性或数值
给todoList添一些料
import { observable, action, computed } from "mobx";
class TodoList {
// 利用
@observable todos = []
@action push() {
this.todos.push({
id: 1,
name: 'new Task'
})
}
@computed get allIdCount() {
return this.todos.reduce(init, item => {
return init+item.id
}, 0)
}
}
export default new TodoList()
在app添加一个显示
<div>目前todoList的id总和是:{this.props.todoList.allIdCount}</div>
我们可以看到,随着你每次的变化,文件都发生了改变
最基本的就到这里了,更多的乐趣希望大家各自探索
喜欢就点个赞吧。谢谢你~
:D