我正在创建一个React + Redux应用程序,但我不确定如何使用这个减速器。
按照real-word上的示例,我使用以下代码存储我的实体。
// Updates an entity cache in response to any action with response.entities.
const entities = (state = initialState, action) => {
if (action.response && action.response.entities) {
return merge({}, state, action.response.entities)
}
return state
}
问题是:如何处理嵌套实体的更新?一切都已经标准化了,所以这是获取密钥并更新它们的问题,但我无法弄清楚如何。
我可以使用docs中的示例,但它只显示了如何解决一个简单的情况,其中只有2个实体,因此每个实体都可以有一个减速器。我有8个(可能还有更多)实体,为每个实体创建一个减速器会有很多工作,每个动作都可以用于获取和接收,但也许这就是我应采取的方法?
答案 0 :(得分:2)
一个选项是在reducer函数
中添加一个动作类型处理程序const entities = (state = initialState, action) => {
if (action.type === 'UPDATE_ENTITY') {
return {
...state,
[action.payload.entity]: {
...state[action.payload.entity],
[action.payload.id]: {
...state[action.payload.entity][id],
[action.payload.field]: action.payload.value
}
}
}
}
if (action.response && action.response.entities) {
return merge({}, state, action.response.entities)
}
return state
}
您的行为可能类似于
const updateEntity = (entity, id, field, value) => ({
type: 'UPDATE_ENTITY',
payload: {entity, id, field, value}
})
这只是一种方式。根据您的使用情况,还有很多其他方法。
答案 1 :(得分:0)
对于处理嵌套实体,我觉得immutablejs是一个非常好的选择。它很容易更新嵌套对象和数组。语法和用法非常简单。
我已经回答了类似的问题。在评论中添加一个链接