Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何为维护选择状态的列表设计Redux存储_Reactjs_Redux_React Redux - Fatal编程技术网

Reactjs 如何为维护选择状态的列表设计Redux存储

Reactjs 如何为维护选择状态的列表设计Redux存储,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我的组件 'List' 'ListItem' (shows item selected or not) 认为商店的结构如下 store : { entities : { orders : [] }, selectedOrders : [ orderId1, orderId2 ] } 因此,每次调度动作时,组件都必须检查其ID是否存在于所选顺序中,然后显示适当的选择状态,这对每次迭代所选顺序的性能不是很坏吗。没有什么把戏能阻止你那样做。正如oshell所评论的,最好只维护一个id为

我的组件

'List'
'ListItem' (shows item selected or not)
认为商店的结构如下

store : {
 entities : {
   orders : []
 },
 selectedOrders : [ orderId1, orderId2 ]
}

因此,每次调度动作时,组件都必须检查其ID是否存在于所选顺序中,然后显示适当的选择状态,这对每次迭代所选顺序的性能不是很坏吗。没有什么把戏能阻止你那样做。正如
oshell
所评论的,最好只维护一个id为
id
的数组。并使用以下简单操作:

selectedOrder.includes(id); //true
或者,如果您确实希望在
选择的顺序中包含对象,则更好的方法是:

selectedOrder.some(order => order.id === id); //true

我认为遍历数组没有什么错。特别是如果它不是特别大的话。我认为优化可读性比性能优先要好

也就是说,您可以使用更高效的数据结构。像物体一样。使用ID作为键,只要值是真实的,它们就不重要。例如:

selectedOrders : { orderId1: true, orderId2: true }
而且检查速度很快:

selectedOrders['orderId1']
添加和删除关键点有点棘手: 添加:

删除:

selectedOrders: state.selectedOrders.filter(o => o !== order)

您甚至可以使用Set,但我不知道它是否在Redux状态下受特别支持。

我建议您阅读

您可以迭代订单并使用
selectedOrder.includes(id)
。对于这样的小国来说,性能不是问题。只要保持一个平面,并防止深的物体。
selectedOrders: state.selectedOrders.filter(o => o !== order)