将大减速器拆分为较小的减速器

Posted

技术标签:

【中文标题】将大减速器拆分为较小的减速器【英文标题】:Splitting big reducer into smaller reducers 【发布时间】:2019-04-24 22:17:15 【问题描述】:

我有一个特征缩减器(切片缩减器),称为动物。我想将这些减速器分成哺乳动物、鸟类、鱼类等。这部分很简单,因为我可以简单地使用ActionReducerMap

现在假设哺乳动物的减速器状态很大,我想将其拆分为几个较小的减速器,即猫的家庭、狗的家庭等。ActionReducerMap 不返回减速器并且不可嵌套。我尝试在网上搜索解决方案或示例,但找不到。简而言之,我的问题是如何制作多级嵌套减速器。

export interface AnimalsState
  mammals: fromMammals.mammalsState;
  birds: fromBirds.birdsState;


export const reducers: ActionReducerMap<AnimalsState> = 
  mammals: fromMammals.reducer,
  birds: fromBirds.reducer
;

我想将哺乳动物减速器拆分成更小的减速器。

【问题讨论】:

【参考方案1】:

您可以使用@ngrx/store 中的combineReducers 函数组成一个新的reducer,这将允许您将dogscats 的reducer 组合成mammals 状态。

我在stackblitz上做了一个简单的例子来说明如何使用它。

combineReducers函数的例子可以在app/store/mammals/mammals.reducer.ts中找到:

import  combineReducers  from '@ngrx/store';

import  catsStoreName, catsReducer, CatsState  from '../cats';
import  dogsStoreName, dogsReducer, DogsState  from '../dogs';


export type MammalsState = 
  [catsStoreName]: CatsState,
  [dogsStoreName]: DogsState,


export const mammalsReducer = combineReducers<MammalsState>(
  [catsStoreName]: catsReducer,
  [dogsStoreName]: dogsReducer,
);

【讨论】:

非常感谢。请问[catsStoreName]中括号是什么意思:catsReducer, 这是一个计算/动态属性名称,例如catsStoreName 变量的值。我用它来不一遍又一遍地写商店名称。

以上是关于将大减速器拆分为较小的减速器的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 按行号将大文本文件拆分为较小的文本文件

如何将列表拆分为较小的列表?

按列名称将数据框拆分为较小的数据框

将庞大的 sql 表逻辑拆分为较小的表

尝试将列表拆分为较小的列表时出错

将列表拆分为较小的列表(分成两半)