通量存储数据指针与依赖项
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...
【讨论】:
好的,所以你的第二个建议是把它放在我猜的组件中?由于您将用户名作为道具传递,这意味着您需要一个父组件来侦听消息和用户,并为每条消息从与该消息关联的用户那里检索用户名。我不确定我是否理解你的第一个建议,但这就是我想要做的。客户端通过与服务器的套接字(将其保存在数据库中)保持有关用户和消息的最新信息。以上是关于通量存储数据指针与依赖项的主要内容,如果未能解决你的问题,请参考以下文章