假設我定義了一個reducer,它返回一個包含諸如id之類的鍵的對象數組。在數組中獲取/查找某個具有某個id的某個對象的方式是什麼?陣列本身可以包含幾個陣列:如何通過鑰匙獲取redux商店中的物品?
{ items:[id:1,...],cases:{...}}
通過id找到記錄/節點的方法是什麼?
假設我定義了一個reducer,它返回一個包含諸如id之類的鍵的對象數組。在數組中獲取/查找某個具有某個id的某個對象的方式是什麼?陣列本身可以包含幾個陣列:如何通過鑰匙獲取redux商店中的物品?
{ items:[id:1,...],cases:{...}}
通過id找到記錄/節點的方法是什麼?
有沒有特殊的方式與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)
問候
我會使用一個庫像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 },
}
這使得選擇更容易,但你必須加載時安排狀態的形狀。
存儲這種數據的最佳方法是將它們存儲在reducer中的對象中,並將它們存儲在byId
和中。
你的情況,那就是:
{
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)
操作,而不是每次都以完整數組迭代。
這看起來很酷,但你有一個codepen或什麼? –