Swift单向数据流

Redux

Redux是Javascript程序的状态容器,遵循3个原则让复杂的状态管理变得容易。

三大原则

单一数据源

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

状态只读

store中 state 是只读的,如果想要变更状态,只能通过action来进行。
视图、网络等事件不能直接修改state,它们只能表达想修改的意图(例如:添加一行数据,数据内容是XXX)。所有的修改都被集中化处理,并且严格按照一个接一个的顺序执行。

使用纯函数来执行修改

为了描述action如何修改state,需要编写reducers。
Reducer只是一些纯函数,它接受先前的state和action,并返回新的state。

Action

Action就是把数据传到store的有效载荷。它是store数据的唯一来源。 一般会通过 store.dispatch 方法将action传到store。

Reducer

Action只是描述了有事情发生这一个事实,并没有指明要如何更新state。具体如何更新state,实现工作是交给reducer的(如何更新state的业务逻辑代码放在reducer中)。

reducer是一个纯函数,接收旧的state和action,返回新的state。

newState = f(previousState,action)

为了保持reducer纯净度,不要在redcuer做这些操作:

  1. 修改传入操作
  2. 执行有副作用的操作,如API请求。
  3. 调用非纯函数,如DateNow,Random。

只要传入参数相同,返回计算得到的下一个state就一定相同。没有特殊情况,没有副作用,没有API请求,没有变量修改,单纯执行计算。

Store

action描述发送了什么,reducers 来根据action更新state,Store就是将他们联系到一起。
store的作用:

  1. 维持应用的 state。
  2. 提供 getState 方法获取state
  3. 提供 dispatch 方法更新state
  4. 通过 subscribe 注册监听器
  5. 通过 unsubscrbe 来取消监听

一个程序只有一个Store,多个界面需要拆分时应该使用 reducer组合 而不是创建多个 store。

发布者

Zmsky

http://xloli.net/?page_id=11

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.