【发布时间】:2018-01-05 19:19:26
【问题描述】:
我有一个具有以下分支的状态对象(试图遵守"Normalizing the state shape"):
用户
一个元素数组,如
{
id: 1,
name: "Werner"
}
来自某个服务器。
用户位置
一个元素数组,如
{
userId: 1,
latitude: 45,
longitude: 70
}
来自某个服务器。
问题
用户可能会因一些操作而改变:SET_USERS_ACTION、ADD_USER_ACTION、DELETE_USER_ACTION。
每当用户发生某些事情时,我都想更新用户位置(这是一个异步操作,因为数据需要来自服务器)。问题的如何是我正在努力解决的问题。
显然,我无法在 reducer 中获取用户位置(更新用户时),因为在这种情况下,reducer 将不再是纯的。
我可能会在 thunk 中执行此操作,但这意味着我必须将用户位置注意事项添加到每个涉及用户操作的操作创建者中,这在我看来就像 mixing concerns。
此外,一旦添加了以某种方式更改用户数组的操作,开发人员需要记住来更新用户位置。我的经验是,这样的事情几乎总会在某个时候被遗忘。
其他并发症
更复杂的是,我们并不总是需要获取位置。仅当显示包含所有用户的地图的组件处于活动状态时,获取用户位置才有意义。并非每个动作都是在我(事先)知道该组件是否可见的地方生成的。一个例子是当我们从服务器(使用 Web Sockets)收到添加或删除用户的通知时。
解决这个问题的最佳方法是什么?
【问题讨论】:
标签: redux redux-thunk