www.ruanyifeng.com/blog/2016/0…
使用场景:
- 用户的使用方式复杂
- 不同身份的用户有不同的使用方式(比如普通用户和管理员)
- 多个用户之间可以协作
- 与服务器大量交互,或者使用了WebSocket
- View要从多个来源获取数据
组件状态改变
-
某个组件的状态,需要共享
-
某个状态需要在任何地方都可以拿到
-
一个组件需要改变全局状态
-
一个组件需要改变另一个组件的状态
action 新数据
-
action 创建函数的结果传给
dispatch()方法即可发起一次 dispatch 过程。//创建action函数 export const addTodo = (text) => { return { type: 'ADD_TODO', id: nextTodoId++, text }} //发起一次 dispatch 过程 const boundAddTodo = text => dispatch(addTodo(text))
//调用 boundAddTodo(text)
Reducer 处理 旧state+新数据
//state不可嵌套
//把所有数据放到一个对象里,每个数据以 ID 为主键,不同实体或列表间通过 ID 相互引用数据。
//reducer 就是一个纯函数
//把应用的 state 想像成数据库
//不要修改 state。 要使用 Object.assign() 新建一个副本。
//在 default 情况下返回旧的 state。
定义(前一个state,action)
const todos = (state = [], action) => {
switch (action.type) {
case 'ADD_TODO':
case 'ADD_TODO': return [ ...state, { id: action.id, text: action.text, completed: false } ]}}
//合并多个reducer,统一暴露出去
combineReducers({ reducer1, reducer2})