redux随笔

209 阅读1分钟

www.ruanyifeng.com/blog/2016/0…

cn.redux.js.org/

使用场景:

  • 用户的使用方式复杂
  • 不同身份的用户有不同的使用方式(比如普通用户和管理员)
  • 多个用户之间可以协作
  • 与服务器大量交互,或者使用了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})