如何使用Immutable.js在Flux存储之间提供依赖关系



我有一个简单的聊天应用程序和以下商店:

  • MessageStore-所有用户/聊天组的消息
  • ChatGroupStore-所有聊天组
  • UserStore-一般所有用户

我正在使用immutable.js来存储数据。问题是,MessageStore需要使用来自ChatGroupStoreUserStore的数据,每条消息的构造如下:

{
id: 10,
body: 'message body',
peer: {...} // UserStore or ChatGroupStore item - destination
author: {...} // UserStore or ChatGroupStore item - creator of the message
}

如何根据ChatGroupStoreUserStore更新MessageStore项目?

我是这样使用AppDispatcher.waitFor()的:

MessageStore.dispatchToken = AppDispatcher.register(function(action) {
switch(action.actionType) {
case UserConstants.USER_UPDATE:
AppDispatcher.waitFor([
UserStore.dispatchToken
]);
// update message logic
break;
}
});

从我的角度来看,我必须等待UserStore更新,然后找到更新用户的所有消息并更新它们。但是我该如何找到更新后的同行?我认为在UserStore中通过引用进行搜索是不够的,因为当数据更改时,不可变的数据不会保留引用,所以我必须在查询中应用更多。但随后我将不得不在MessageStore处理程序中应用其他存储的查询逻辑。

目前,我在每条消息中存储对等体作为参考,也许我应该改为:

{
id: 10,
peer: {
peerType: 'user', // chatGroup
peerId: 20
}
}

如果有人能澄清一下那就太好了。我真的很困惑。

作为一种解决方案,我认为在任何情况下最好的选择都是不嵌套相关数据,避免对来自服务器的数据进行转换,这将减少我在任何时候保持数据最新所需的工作量。然后,在您看来,您所要做的就是订阅更改并将必要的数据组合在一起。

焊剂的替代品

还有一个良好且维护良好的状态容器解决方案,名为Redux,我建议每个人至少尝试一下。它只有一个存储区,并将整个状态组合到一个单独的深层对象中,尽管您可以单独创建每个reducer。它还有一个很好的方法将其与React集成,请参阅React的用法。

最新更新