小编Cod*_*ife的帖子

当减速器改变切片时 Ngrx 选择器不触发

我正在开发一个广泛使用 Ngrx 存储的 angular 2 应用程序。我的商店有一个不错的结构。我使用选择器来检索状态片,通常所有选择器都会正确触发它们关联的订阅。Ngrx 是惊人的。

可悲的是,今天我遇到了一个新问题,我尝试在网上四处寻找解决方案,但没有成功。我终于通过测试不同的语法找到了自己的解决方法,但我很好奇为什么会发生这种情况。

这个选择器和我所有的其他选择器完全一样:

export const getToolBars = (state: State): any => state.toolBars;
export const selectState: MemoizedSelector<object, State> = createFeatureSelector<State>('http');
export const selectToolBars: MemoizedSelector<object, any> = createSelector(selectState, getToolBars);
Run Code Online (Sandbox Code Playgroud)

问题在于,选择器不会像通过减速器更新数据时那样触发订阅。

我找到了针对这种特殊情况的解决方法。使用这个:

export const getToolBars = (state: State): any => { return { toolBars: state.toolBars }; };
Run Code Online (Sandbox Code Playgroud)

代替 :

export const getToolBars = (state: State): any => state.toolBars;
Run Code Online (Sandbox Code Playgroud)

修复它,但我希望我所有的吸气剂看起来都一样,所以我想知道为什么这个问题首先发生?

附加信息, state.toolBars 是一个接口为

toolBars: { [name: string]: any };
Run Code Online (Sandbox Code Playgroud)

任何提示或参考都可以。现在一切都“有效”,我只是在寻找提高技能的方法。非常感谢!

编辑:

我做了一个stackblitz来说明这个问题。

https://stackblitz.com/edit/angular-selector-issue?file=src%2Fapp%2Froot-store%2Ftest-store%2Fselectors.ts

在这个 stackblitz 中,每当 reducer 将东西添加到 …

ngrx angular

3
推荐指数
1
解决办法
3016
查看次数

标签 统计

angular ×1

ngrx ×1