假设我定义了一个reducer,它返回一个对象数组,其中包含诸如id之类的键。获取数组中具有特定id的特定对象的/finding的方法是什么?数组本身可以包含多个数组:
{ items:[id:1,...],cases:{...}}通过id查找记录/节点的redux方法是什么?
发布于 2016-11-24 15:47:06
我会使用像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 },
}这使得选择更容易,但是在加载时您必须安排状态的形状。
发布于 2016-11-24 22:47:42
存储此类数据的完美redux方法是将它们存储在reducer中的一个对象中,即byId和allIds。
在您的情况下,它将是:
{
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)操作,而不是每次都在完整的数组中迭代。
发布于 2016-11-24 15:13:23
使用redux没有特殊的方法可以做到这一点。这是一个简单的JS任务。我想你也可以使用react:
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)问候
https://stackoverflow.com/questions/40779948
复制相似问题