我有一个像这样的redux商店:
{
'1f458697-e2c0-4d11-ada0-ee7b113c2429': {
name: 'Jim',
title: 'Developer',
active: true
},
'4498eb08-3786-495a-a66c-21a65138ab24': {
name: 'Darren',
title: 'Human Resources',
active: false
},
'c7975551-153f-4eab-a875-ed5445f76252': {
name: 'Francesa',
title: 'Chief of Internal Operations',
active: false
}
}
我有一个可以获得活跃用户的选择器。
export const getActiveUser = (users) => _.find(users, { 'active': true });
我的问题是,在我的React组件中使用的有效负载中包含用户ID的最好方法是什么:
这是一种不好的做法,而且是我应该使用数组的标志。
我是否应该更改用户有效负载以包含ID。这是错误的,因为我会复制数据。
我是否应该操纵该特定选择器以包含用户ID。
答案 0 :(得分:1)
是的,使用数组表格式数据和filter
函数来过滤结果集(如果一次可以激活多个用户)。如果一次只能有一个用户处于活动状态,请考虑更改数据库模式并创建单独的变量activeUserId
,而不是让所有用户都包含不必要的有效负载(并相应地更改redux存储的形状)。
答案 1 :(得分:0)
- 这是一种不好的做法,也是我应该使用数组的标志 代替。强>
规范化数据,因此您可以在O(1)中编辑或删除项目(您的案例中的用户)是一种很好的方法,Dan Abramov的idiomatic redux course也包含了这一点。
- 我是否应该更改用户有效负载以包含ID。由于我要复制数据,这感觉不对。
由于您通常不会更改ID,因此在用户对象中添加ID应该不是问题,它应该可以让您快速访问ID。但是,如果你不愿意复制那也是可以接受的。
- 我是否应该操纵该特定选择器以包含用户ID。
选择器角色的一部分是创建派生数据,就像您过滤用户时所做的那样。因此,如果您想要每个用户的ID,这是一个很好的地方。不要改变对象,只需用ID创建新的用户对象。但是,如果您拥有大量用户,则应使用memoized selectors或将ID添加为有效负载的一部分,以防止出现性能问题。