我正在开发一个广泛使用 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来说明这个问题。
在这个 stackblitz 中,每当 reducer 将东西添加到 …