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)