不同应用状态结构级别的reducer的可重用性

Posted

技术标签:

【中文标题】不同应用状态结构级别的reducer的可重用性【英文标题】:Reusability of reducers at different levels of app state structure 【发布时间】:2018-09-17 09:08:55 【问题描述】:

例如,我们有 reducer photos,它通过动作 ADD_PHOTOREMOVE_PHOTO 处理照片数组。如果我们有数组usersposts,它们都有照片数组的字段。

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

    创建减速器user = combineReducers(..., photos, ...) 创建 actionCreator updateUser
const updateUser = (id, subAction) => ( 类型:UPDATE_USER, 有效载荷: ID, 子动作 )
    创建reducer users(这里我使用的是Immutable.js)
功能用户(状态=列表(),动作) 开关(动作类型) //... 案例 UPDATE_USER: const id, subAction = action.payload const index = state.findIndex(user => user.id == id) 返回状态.updateIn( [索引,“照片”], 状态 => 照片(状态,子动作) ) 休息 //... 默认: 返回状态

    然后我将像这样使用它:

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


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

【问题讨论】:

【参考方案1】:

为什么不简单地在用户发起的地方同时调度两者?

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

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

所以不知道“正确”,但我想说按你的方式做并不理想。我会尝试按顺序分派,或者可能以一种处理嵌套更新并将操作分派到多个减速器的元操作来分派。

【讨论】:

以上是关于不同应用状态结构级别的reducer的可重用性的主要内容,如果未能解决你的问题,请参考以下文章

Redux:重用reducer来更新多个状态属性

react-flux 应用程序的可重用性/可扩展性问题

Java内部锁的可重用性(Reentrancy)

csharp 用于处理.net模型状态的可重用ValidationFilter属性

具有 set Input() 任何类型的可重用组件是一个好习惯吗?

编程 - 可重入性