我的状态为BehaviorSubject<Array<user>>(userListSub$),可从不同位置更新.

例如,

  • 当我在用户上单击跟随时
  • 当我在用户上单击取消关注时
  • 当我喜欢某个用户时

在不同的组件中订阅相同的状态.如果事件是在我喜欢用户时触发的,我希望特定组件不对状态(userListSub$)发出的事件做出react .

I know we can store the origin of the event also in the state like this,
userListSub$.next({ data: user, origin: userList })
and check for the origin where I subscribe.

是否有更好的方法来标识或忽略特定订阅上的事件?
我的 idea 是正确的吗?如果没有,你能建议一个更好的方法吗?

推荐答案

你可以试试稍有不同的型号.

假设您有3个组件:C1、C2和C3.所有组件都对事件"Click Follow on a User"和"Click Unollow on a User"做出react .

然而,只有C1和C2对事件"用户最喜欢"作出react .

在本例中,您可以建模两个事件流,因此有两个BehaviourSubject,我们称它们为S1S2,一个通知"Click Follow on a User"和"Click UnFollow on a User"事件,另一个通知"Favorite a User"事件.

然后你可以创建一个Observable,让我们称它为Obs1 = merge(S1, S2),它合并了S1S2.

现在,C1和C2可以订阅Obs1,而C3可以订阅S1.

通过这种方式,您应该能够实现您的目标,并且,至少在我看来,这是一种比添加源代码的id更惯用的react 方式.

Javascript相关问答推荐

为什么JavaScript双边字符串文字插值不是二次的?

从连接字符串创建客户端时,NodeJS连接到CosmosDB失败

如何在JavaScript中在文本内容中添加新行

我试图实现用户验证的reduxstore 和操作中出了什么问题?

将状态向下传递给映射的子元素

使用Java脚本根据按下的按钮更改S文本

如何从html元素创建树 struct ?

虚拟滚动实现使向下滚动可滚动到末尾

我创建了一个创建对象的函数,我希望从该函数创建的对象具有唯一的键.我怎么能做到这一点?

使用ThreeJ渲染的形状具有抖动/模糊的边缘

将异步回调转换为异步生成器模式

在画布中调整边上反弹框的大小失败

自定义确认组件未在vue.js的v菜单内打开

如何用javascript更改元素的宽度和高度?

如何在AG-Grid文本字段中创建占位符

Socket.IO在刷新页面时执行函数两次

在JavaScript中,有没有一种方法可以迭代字符串的词法标记?

MongoDB通过数字或字符串过滤列表

使用Java脚本替换字符串中的小文本格式hashtag

在点击链接后重定向至url之前暂停