【发布时间】:2018-06-06 19:59:48
【问题描述】:
我有 Angular 5 应用程序和 ngrx。我有一组对象在存储中。当我订阅获取此数组更改事件时,即使我没有更改 state.details.selectedOptions。 我只更改了 state.details.page 并调用了订阅者.
当我将 state.details.selectedOptions 更改为纯值(字符串)时,一切都按预期工作。正如我所见,问题出在数组/嵌套元素中?
//store
const initialState = {
page: null,
selectedOptions: []
}
// selector
export const selectedOptionsSelector = createSelector(
(state: any) => state.details.selectedOptions
)
// also tried such variant
export const selectedOptionsSelector = (state: any) => state.details.selectedOptions
// Component
ngOnInit() {
this.store.select(selectedOptionsSelector).subscribe((res: any) => {
console.log('selectedOptions', res)
})
}
更新:
基本上在我的情况下,我在 selectedOptions 中总是有空数组,因为初始状态没有改变。我尝试在 select 中使用 distinctUntilChanged 但没有帮助
【问题讨论】:
-
你的描述很差,但可能是原语和实例的问题,你可能注意到
"abc" === "abc",但是["abc"] !== ["abc"],所以基本上每次使用{...}或@987654325 @ 您正在创建一个新实例,使用rxjs之类的运算符distinct在这里可能非常有用,因为它允许比较新值和当前值,并且仅当它与使用自定义比较的前一个值不同时才发出新值功能