angular - 防止特定选择器在分派新操作时发出值的技巧?
问题描述
在同一个组件中,我有以下代码:
this.store.select(state => state.someProperty)).pipe(
takeUntil(this.destroy$),
// distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))
).subscribe(val => {
dosomething()
})
在同一个组件中,我有存储操作来触发一个新值。
this.store.dispatch(
someAction({
payload: {
value
}
}));
如果触发以下操作,我不希望上面的订阅发出值,我知道这不是常见的要求,也不是内置的支持,也不是阻止特定商店选择器发出值的正确模式,但我从具体情况。
我曾尝试在发送该操作之前触发特定令牌,例如
this.storeToken$.next('Hey, some one please don't emit following action')
this.store.dispatch(
someAction({
payload: {
value
}
}));
并在订阅选择器时尝试一些 rxjs 技巧:
race(this.store.select(state => state.someProperty).pipe(
delay(100)), this.storeToken$)
我想过滤掉令牌,但它永远不会起作用。商店选择者总是赢得比赛,
请问有人有想法吗?
解决方案
您可以使用take
运算符获取第一个值。如果您需要更具体,请使用distinct
运算符之一或filter
.
this.store.select(state => state.someProperty).pipe(take(1))
推荐阅读
- scala - 将带有行的 WrappedArray 列转换为带有行的 Dataframe
- migration - 在 GraphQL 中触发任务的惯用方式
- django - 如何在 ValidationError 中构造条件
- html - 我无法从我的 WP 网站上的表格中删除边框
- c# - Html.Action 或 Html.Partial 不适用于属性路由
- python - 为什么此图路线重复
- javascript - 如何添加多种过滤方式?
- reactjs - React - Redux - 只显示一些数据
- python - 查看一个字符串是否以另一个字符串的结尾字符开头?
- javascript - Javascript 检查重复项并添加重复的 id