例如,我们有缩减器photos
,它通过操作ADD_PHOTO
和REMOVE_PHOTO
来处理照片数组。如果我们有数组users
和posts
,它们都有照片数组的字段。
因此,为了避免代码重复,我将执行以下操作:
user = combineReducers(..., photos, ...)
updateUser
const updateUser = (id, subAction) => ({ type: UPDATE_USER, payload: { id, subAction } })
users
(这里我使用的是Immutable.js)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 } }
然后我会像这样使用所有这些:
dispatch(updateUser(id, addPhoto(url)))
这是我问题的正确解决方案吗?
答案 0 :(得分:0)
为什么不简单地在用户发起的地方发送?
dispatch(updateUser(id));
dispatch(addPhoto(url));
我还没有遇到过您之前申请的这种模式。一个减速器负责减少另一个减速器的状态似乎有点不寻常。在它们之间创建一种感觉非常纯净的依赖关系。我甚至不确定一个减速器应该能够/可以看到另一个减速器的状态。
所以不知道"纠正",但我说这样做并不理想。我尝试按顺序调度,或者在某种元行动中调度嵌套更新并将操作分配给多个reducer。