我是redux的新手,而且我在设计redux状态的形状时非常困难。我当前的redux状态部分看起来像这样
邀请reducer:
invitees: [{
'_id': '626262',
'name': 'xyz'
}, {
'_id': '6262',
'name': 'jsjsj'
}, {
'_id': '626',
'name': 'gdgdg'
}
....
]
我应该像这样保留这个对象,还是应该保留id并将其作为一个关键词:
invitees: [626262: {
'name': 'xyz'
}, 6262: {
'name': 'jsjsj'
}....]
如果我必须使用第二个选项,我该怎么做?我在几篇博客中读到过第二种选择会有所帮助。
答案 0 :(得分:0)
您可以使用Reduce和Object Spread Operator
将您的回复数组转换为您想要的内容const data = [
{ id: 1, name: 'name-1' },
{ id: 2, name: 'name-2' },
{ id: 3, name: 'name-3' },
{ id: 4, name: 'name-4' },
{ id: 5, name: 'name-5' }
];
function myReducer({ payload }) {
return payload.reduce((acc, current) => {
return Object.assign({}, acc, {
[current.id]: {
[current.name]: current.name
}
})
}, {});
}
const newState = myReducer({ payload: data });
console.log(newState);
/**
{
1: { name: 'name-1' }
2: { name: 'name-2' }
3: { name: 'name-3' }
4: { name: 'name-4' }
5: { name: 'name-5' }
}
*/
答案 1 :(得分:0)
您的第二个示例不是有效的JavaScript对象。你在第二个例子中需要的不是数组,而是像
这样的对象invitees: {
'626262': {
'name': 'xyz'
},
'6262': {
'name': 'jsjsj'
}
....
}
第二个例子在某种意义上帮助你,为了获得一个name属性,你不必循环遍历数组的每个元素来搜索id而不是你可以使用{{1来直接访问它记谱法
实施例
brackets