Redux 中状态树中分支之间的依赖关系



我有一个具有以下分支的状态对象(尝试遵循"规范化状态形状"):

用户

一系列元素,例如

{
id: 1,
name: "Werner"
}

源自某个服务器。

用户位置

一系列元素,例如

{
userId: 1,
latitude: 45,
longitude: 70
}

源自某个服务器。

问题所在

用户可能会根据许多操作而更改:SET_USERS_ACTIONADD_USER_ACTIONDELETE_USER_ACTION

每次用户出现问题时,我都想更新用户位置(这是一个异步操作,因为数据需要来自服务器)。事情的经过是我正在努力解决的问题。

显然,我无法在化简器中获取用户位置(更新用户时),因为在这种情况下化简器将不再是纯粹的。

我可能会立即这样做,但这意味着我必须为每个涉及用户操作的操作创建者添加用户位置注意事项,这对我来说似乎是混合问题。

此外,添加以某种方式更改用户数组的操作后,开发人员还需要记住更新用户位置。我的经验是,像这样的事情几乎总是会在某个时候被遗忘。

进一步的并发症

更复杂的是,我们并不总是需要获取位置。仅当显示包含所有用户的地图的组件处于活动状态时,获取用户位置才有意义。并非每个动作都是在我(事先)知道该组件是否可见的地方生成的。一个例子是,当我们收到来自服务器(使用 Web 套接字)的通知,告知已添加或删除用户时。

解决这个问题的最佳方法是什么?

我建议使用 https://github.com/kolodny/immutability-helper 使用update帮助程序的好处是,您可以一次进行许多更改,而无需多次接触状态。例如:

import update from 'immutability-helper';
...
case SET_USERS_ACTION:
return update(
state,
{
users: {
[idx]: { status: { $set: 'ready' }}
},
locations: {
$push: [{...}]
}
}
);
break;

最新更新