应用程序状态结构的不同级别的Reducer的可重用性

时间:2018-04-07 13:45:08

标签: redux

例如,我们有缩减器photos,它通过操作ADD_PHOTOREMOVE_PHOTO来处理照片数组。如果我们有数组usersposts,它们都有照片数组的字段。

因此,为了避免代码重复,我将执行以下操作:

  1. 创建缩减器user = combineReducers(..., photos, ...)
  2. 创建actionCreator updateUser
  3. 
        const updateUser = (id, subAction) => ({
            type: UPDATE_USER,
            payload: {
                id,
                subAction
            }
        })
    
    
    1. 创建reducer users(这里我使用的是Immutable.js)
    2. 
          function users(state = List(), action) {
              switch (action.type) {
      
                  //...
      
                  case UPDATE_USER:
                      const { id, subAction } = action.payload
                      const index = state.findIndex(user => user.id == id)
      
                      return state.updateIn(
                      [index, 'photos'],
                      state => photos(state, subAction)
                      )
                      break
      
                  //...
      
                  default:
                      return state
              }
          }
      
      
      1. 然后我会像这样使用所有这些:

        dispatch(updateUser(id, addPhoto(url)))

      2. 这是我问题的正确解决方案吗?

1 个答案:

答案 0 :(得分:0)

为什么不简单地在用户发起的地方发送?

dispatch(updateUser(id));
dispatch(addPhoto(url));

我还没有遇到过您之前申请的这种模式。一个减速器负责减少另一个减速器的状态似乎有点不寻常。在它们之间创建一种感觉非常纯净的依赖关系。我甚至不确定一个减速器应该能够/可以看到另一个减速器的状态。

所以不知道"纠正",但我说这样做并不理想。我尝试按顺序调度,或者在某种元行动中调度嵌套更新并将操作分配给多个reducer。