假设我定义了一个reducer,它返回一个对象数组,其中包含id或者其他键。什么是在数组中获取/查找具有特定id的特定对象的redux方法。数组本身可以包含几个数组:
{ items:[id:1,...],cases:{...}}
通过id查找记录/节点的redux方法是什么?
答案 0 :(得分:0)
使用redux没有特殊的方法。这是一个简单的JS任务。我想你也会使用反应:
function mapStoreToProps(store) {
function findMyInterestingThingy(result, key) {
// assign anything you want to result
return result;
}
return {
myInterestingThingy: Object.keys(store).reduce(findMyInterestingThingy, {})
// you dont really need to use reduce. you can have any logic you want
};
}
export default connect(mapStoreToProps)(MyComponent)
问候
答案 1 :(得分:0)
我使用像 lodash 这样的库:
var fred = _.find(users, function(user) { return user.id === 1001; });
值得注意的是,优先选择对象优于数组'在商店里(特别是对于大型的州树);在这种情况下,您将项目存储在一个对象中(例如)id作为键:
{
'1000': { name: 'apple', price: 10 },
'1001': { name: 'banana', price: 40 },
'1002': { name: 'pear', price: 50 },
}
这使选择更容易,但是你必须在加载时排列状态的形状。
答案 2 :(得分:0)
存储此类数据的完美redux方法是将它们byId
和allIds
存储在reducer中的对象中。
在你的情况下,它将是:
{
items: {
byId : {
item1: {
id : 'item1',
details: {}
},
item2: {
id : 'item2',
details: {}
}
},
allIds: [ 'item1', 'item2' ],
},
cases: {
byId : {
case1: {
id : 'case1',
details: {}
},
case2: {
id : 'case2',
details: {}
}
},
allIds: [ 'case1', 'case2' ],
},
}
参考:http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html
这有助于保持状态的标准化,既可以维护也可以使用数据。
这种方式可以更容易地遍历所有数组并进行渲染,或者如果我们需要通过它的id获取任何对象,那么它将是O(1)
操作,而不是每次都在完整数组中进行迭代。 / p>