[英]React/Redux update state array if action id is not already present
我有一组操作来更新 Redux 状态。 我正在努力过滤最终结果。 这是我的行动
payload: 'id'
)payload: 'id'
)以下是我的例子:
case 'GET_ITEMS':
return {
...state,
list: action.payload, // [{ id: 'one', count: 1 }, { id: 'two', count: 2}]
};
case 'SET_ITEM':
return {
...state,
list: [...state.list, { id: action.payload, count: state.list.length }],
};
case 'DELETE_ITEM':
return {
...state,
list: state.list.filter(item => item.id !== action.payload),
};
只有 GET_ITEMS 操作类型返回响应数据,其余的我必须手动更新它们。 波纹管是我的问题在相同的顺序
您可以为 SET_ITEM 操作使用辅助函数:
case 'SET_ITEM':
return {
...state,
list: updateList(state.list, action)
};
function updateList(list, action) {
const found = list.find((element) => element.id === action.payload);
if (found) {
// ...update found props
return list;
}
return [...list, { id: action.payload, count: list.length + 1 }];
}
我肯定会将 count 属性移到元素之外,因为按照它的建模方式,每个元素都会有不必要的 count 属性,如果我们删除数组中间的元素,则数组上的每个元素的 count 属性都会出错右边。 所以更好的状态是:
{
...state,
list,
listCount
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.