Last updated
Last updated
用于修改 Store 的纯函数。
强制:Reducer 一定要是纯函数,禁止使用非纯函数。
推荐:Reducer 函数应该尽量简单,只是修改 Store 的操作,尽量不写业务代码。
推荐:不同的模块应该有不同的 Reducer,最后通过 combineReducers 来 combine 到一起。
【问题】Reducer 的划分后之间的状态共享问题?否则一个 Reducer 会越来越大,case 的情况会越来越多,拆分后如何能很好地进行 Reducer 之间的通信和状态共享?
复杂数据的深度拷贝是很花性能的,这个时候就可以使用 Immutable 来解决这个问题。Immutable 不可改变的意思。对 Immutable 生成的数据进行操作之后总是返回一个新的数据,原有的数据不会改变。
Immutable 通过结构共享来解决的数据拷贝时的性能问题,数据被 set 的时候,Immutable 会只 clone 它的父级别以上的部分,其他保持不变,这样大家可以共享同样的部分,可以大大提高性能。如图所示:
最后橙色的节点是结构共享的部分。
Immutable 有两个库:
强制:Reducer 初始化 initialState 时必须使用 Immutable 的数据类型,防止在 Reducer 外的其他地方对 Store 发生修改操作。
推荐:Reducer 初始化 initialState 时使用 immutable-js 时建议用 Immutable.Map 方法而不是 fromJS 方法,效率更高。
:Facebook 的项目,比较重,取数据必须用函数,对数据有极高的性能要求时用。
:精简版的 Immutable,取数据可以直接点取,大部分情况使用该库即可。