您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Reducer 逻辑拆分

对于任何有意义的应用来说,将所有的更新逻辑都放入到单个 reducer 中都将会让程序变得不可维护。虽然说对于应该有多长没有准确的规定,但一般来讲,应该比较短,并且只做一件特定的事。因此,把很长的,同时负责很多事的拆分成容易理解的小片段是很好的编程方式。

因为 R reducer 也仅仅是,上面的概念也适用。你可以将 reducer 中的一些逻辑拆分出去,然后在父中这个新的。

这些新的通常分为三类:

一些小的工具,包含一些可重用的逻辑片段

用于处理特定情况下的数据更新的,参数除了 (state, action) 之外,通常还其它参数

处理给定 state 切片的所有更新的,参数格式通常为 (state, action)

为了清楚起见,这些术语将用于区分不同类型的和不同的用例:

reducer: 任何符合 (state, action) -> newState 格式的(即,可以用做 Array.reducer 参数的任何)。

root reducer: 通常作为 createStore 第参数的。他是唯一的在所有的 reducer 中必须符合 (state, action) -> newState 格式的。

slice reducer: 负责处理状态树中一块切片数据的,通常会作为 combineReducers 的参数。

case function: 负责处理特殊 action 的更新逻辑的。可能就是 reducer ,也可能需要其他参数才能正常工作。

higher-order reducer: 以 reducer 作为参数,且/或返回新的 reducer 的(比如: combineReducers, r-undo)。

在各种讨论中 “sub-reducer” 这个术语通常表示那些不是 root reducer 的任何,但这个表述并不是很精确。一些人认为应该表示 "业务逻辑(business logic)" (与应用程序特定行为相关的)或者 “工具(utility functions)”(非应用程序特定的通用)。

将复杂的环境分解为更小,更易于理解的过程就是术语中的 。这个术语可以用在任何中。在 R 中,使用第三个来构造 reducer 逻辑是非常普遍的,即更新逻辑被委托在基于 state 切片的的其他中。R 将这个概念称为 reducer composition,到目前为止,这个是构建 reducer 逻辑最常用的。

事实上, R 包含 combineReducers() 的工具,它专门抽象化基于 state 切片的其他 reducer 的工作过程。但是你必须明确的是,这并不是唯一模式。

实际上,完全可以用所有的三种拆分逻辑,通常情况下,这也是好主意。Refactoring Reducers 章节会演示一些实例。


联系我
置顶