没有 shouldComponentUpdate 的 MobX 条件更新

MobX conditional updating without shouldComponentUpdate

所以我的情况与 Slack 聊天非常相似。

我有一个包含聊天的域存储,当我打开一些包含未读消息的聊天时,我希望在已读和未读(新)消息之间有一些分隔符。

同样在我打开聊天的那一刻,我发送了一个请求,将这个聊天的所有未读消息标记为已读。

所以我的问题是:从服务器获得响应后,我的所有邮件都在我的域存储中被读取。但在我的消息组件中,它们仍应显示为未读(在“新消息分隔符”下方),直到用户执行某些特定操作。

因此,如果它只是 React,我可以使用 shouldComponentUpdate 来忽略 isUnread 属性的更改。

以前我在这个组件中有消息的本地可观察副本,我只是在构造函数中初始化,然后在 componentWillReceiveProps 中更新(忽略提到的道具更改)。现在这个生命周期被弃用了,所有这些方法看起来都像是一种反模式。甚至 MobX 也说不要以这种方式复制 observables。

反应也是一样。它们应该用于副作用,而不是用于将观察到的数据复制到另一个 observables。

因此我想不出任何正确的方法。

你可以使用 reaction 来改变可观察状态,从技术的角度来看它是完全有效的,它会按预期工作,但 Mobx 的创建者认为它是一种反模式,在某种意义上是构建代码的更好方法(他建议改用 computed 属性)。因此,如果使用 reaction 可以帮助您解决问题,请使用它。

有关此 github 问题的更多信息:Question: Can I rely on reaction execution order?

话虽如此,也许您应该更改消息对象的结构,并添加另一个 属性 UISeen,仅当消息已在 ui 和在显示消息时写入和读取 属性。