javascript - 我如何使用 immutable.js 之类的东西在 Redux 中组合多个 combineReducers 函数

标签 javascript reactjs redux immutable.js

我正在使用 immutable.JS 通过 redux-immutablejs 管理我的商店。我现在想使用 redux-form 库,但我在结合 reducers 时遇到了问题。

Redux-immutable 提供了一个 combineReducers 函数,该函数将检查传递给它的所有 reducer 是否返回不可变对象(immutable对象)。

Redux 本身提供了一个 combineReducers 函数,该函数不执行此类检查。

Redux-form 要求您包含它们的 reducer,但我不能使用 Redux immutable 的 combineReducers 这样做,因为它会失败。

所以我要做的基本上是像这样组合这两个函数的输出:

import { combineReducers } from 'redux';
import { combineReducers as combineReducersUtils } from 'redux-utils';
import {reducer as formReducer} from 'redux-form';

const mainReducers = combineReducersUtils({
  devices, alarms
});

const extraReducers = combineReducers({
  form: formReducer
});

export default (mainReducers + extraReducers);

最后一行显然不起作用,但基本上说明了我所追求的。

感谢您花时间阅读本文。

最佳答案

也许是这样的?

function rootReducer(state, action) {
  const newState = combineReducersUtils({devices, alarms})(state, action);
  return combineReducers({form: formReducer})(newState, action);
}

它应该可以工作,因为 combineReducers 的返回值只是一个 reducer:

(Function): A reducer that invokes every reducer inside the reducers object, and constructs a state object with the same shape.

https://github.com/rackt/redux/blob/master/docs/api/combineReducers.md


更新为不在每次分派(dispatch)时创建新函数:

const mainReducers = combineReducersUtils({devices, alarms});
const formReducers = combineReducers({form: formReducer});

function rootReducer(state, action) {
  return formReducers(mainReducers(state, action), action);
}

关于javascript - 我如何使用 immutable.js 之类的东西在 Redux 中组合多个 combineReducers 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33720361/

相关文章:

javascript - 导出一个函数只是为了测试被认为是一种不好的做法吗?

javascript - 在 React/Redux 中,如何按照 JSON API 结构发布数据

javascript - ngrx处理对象中的嵌套数组

javascript - 使YouTube视频播放器从列表服务器端随机播放视频

javascript - Asp.net Mvc使用ajax上传多个文件出现一些错误

javascript - 通过与第一列进行比较来更改第二列的颜色

javascript - 将动态生成的复选框添加到 react 表并捕获行数据

javascript - 从子组件函数更新 React 状态

javascript - 我如何知道 Redux 操作何时完成

javascript - 如何在单击事件中附加和删除 Font Awesome 图标 (Javascript)