在Redux上处理许多实体而不重复

时间:2016-12-16 23:40:15

标签: reactjs redux react-redux reducers

我正在创建一个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个(可能还有更多)实体,为每个实体创建一个减速器会有很多工作,每个动作都可以用于获取和接收,但也许这就是我应采取的方法?

2 个答案:

答案 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是一个非常好的选择。它很容易更新嵌套对象和数组。语法和用法非常简单。

我已经回答了类似的问题。在评论中添加一个链接