通量存储数据指针与依赖项

Posted

技术标签:

【中文标题】通量存储数据指针与依赖项【英文标题】:Flux Store Data pointers vs Dependencies 【发布时间】:2015-06-24 13:15:22 【问题描述】:

所以我的情况是这样的:假设你有一个以 Flux 方式编写的聊天应用程序,但现在我也有一个 UserStore 来跟踪所有连接的用户。消息具有文本和发送消息的用户的 ID。用户可以更改他们的姓名,因此如果用户更改了姓名,我希望该用户之前发送的所有消息都更新其姓名。

服务器将此数据发送给客户端:

Message = id: int, text: string, authorId: int User = id: int, name: string

现在我想显示每条消息:

User.get(message.id).name : message.text

如果没有 Flux 模式,我只会向 Message 添加一个字段,它是指向用户的指针,即

Message = id: int, text:string, authorId: int, author: User

然后我可以显示如下:

message.author.name : message.text

但我觉得这不是“通量方式”。所以现在我有一个 MessageStore 和一个 UserStore。

问题是:我应该在哪里从 UserStore 检索正确的用户以获取其名称以显示它?

i) 我是否应该通过添加 authorName 将此逻辑放入 MessageStore 并在“CHANGE_USER”调度上放置一个侦听器,然后适当地更新 authorName?

ii) 或者我应该把它放在显示消息的组件中并在那里监听 MessageStore 和 UserStore?

iii) 或者我为什么不应该更新我的 MessageStore 以便消息具有指向用户的指针,正如我所建议的那样,这不是通量方式?

谢谢。

编辑:让它更具体。

【问题讨论】:

【参考方案1】:

有趣的问题...我可以看到几种可行的方法。

如果您的消息实际上存储在数据库中,并且您只需将它们拉入存储中以供使用,那么在数据库中更新它们就很容易了,因此可以选择。

第二种方法是,每当您显示消息时,例如在聊天窗口等中,只需将 UserName 作为道具传递...然后当用户名更改时,它就会更改。

例子:

<div>this.props.UserName <div> this.props.message </div> </div>

正如您所说,为每条消息关联一个 UserID 也是有意义的,这样您就可以在想要显示消息时检索名称。

如果您添加更多详细信息来说明您具体想如何做/显示的事情,我可能会给出更好的答案:P...

【讨论】:

好的,所以你的第二个建议是把它放在我猜的组件中?由于您将用户名作为道具传递,这意味着您需要一个父组件来侦听消息和用户,并为每条消息从与该消息关联的用户那里检索用户名。我不确定我是否理解你的第一个建议,但这就是我想要做的。客户端通过与服务器的套接字(将其保存在数据库中)保持有关用户和消息的最新信息。

以上是关于通量存储数据指针与依赖项的主要内容,如果未能解决你的问题,请参考以下文章

通量存储中的异步数据加载

关于多功能应用程序的状态与通量存储的问题

通量与全局变量(在服务中)

创建用于从 API 获取数据的 altjs 通量存储

我应该为每个数据库表使用单独的通量存储吗?

如何以通量模式存储对象更新视图