Stay hungry Stay foolish

Redux随记

Posted on By Will Lee

背景

这里简单谢谢Redux一些基本概念吧,有时候虽然用的时候可以查一查,但是讲的时候总感觉不系统,可能还是理解不深入,有空还是要看下源码加深理解

Redux本质上是帮助管理state的

三大原则

  • 单一数据源

整个应用的 state 被储存在一棵 object tree 中,并且这个 object tree 只存在于唯一一个 store 中

console.log(store.getState())
  • State是只读的

唯一改变 state 的方法就是触发 action,action 是一个用于描述已发生事件的普通对象

视图和网络请求都不能修改state,所有的修改都被集中化处理,那就是Action

store.dispatch({
  type: 'COMPLETE_TODO',
  index: 1
})
  • 使用纯函数来执行修改

为了描述 action 如何改变 state tree ,你需要编写 reducers

reducers是函数,可以被拆分,可以控制其调用顺序

import { VisibilityFilters } from '../actions'

const visibilityFilter = (state = VisibilityFilters.SHOW_ALL, action) => {
  switch (action.type) {
    case 'SET_VISIBILITY_FILTER':
      return action.filter
    default:
      return state
  }
}

export default visibilityFilter

Action

是store数据的唯一来源,通过dispatch()将action传递到store()

Action 创建函数

function addTodo(text) {
  return {
    type: ADD_TODO,
    text
  }
}
dispatch(addTodo(text))

Reducers

指定了应用状态的变化如何响应 actions 并发送到 store 的

(previousState, action) => newState

注意:

  1. 不要修改 state
  2. 在 default 情况下返回旧的 state

Store

Redux 应用只有一个单一的 store

  1. 维持应用的 state;
  2. 提供 getState() 方法获取 state;
  3. 提供 dispatch(action) 方法更新 state;
  4. 通过 subscribe(listener) 注册监听器;
  5. 通过 subscribe(listener) 返回的函数注销监听器。