ImmutableJS与Redux的combineReducers

时间:2015-11-29 15:32:01

标签: redux immutable.js

获得警告:当使用#redux combineReducers组合reducer(每个都有自己的immutable.js Map)时,“还没有完全支持使用Maps作为子级”。什么是更好的商店结构来避免这种情况?

import reducer_2 from './action_handlers/two';
import reducer_3 from './action_handlers/three';
import { combineReducers } from 'redux';

let reducer = combineReducers({
    reducer_2,
    reducer_3
});

export default reducer;

//=====================
// ./action_handlers/two.js

const INITIAL_STATE_2 = new Map({
    foo: 'bar'
});
export default function reducer_2(state = INITIAL_STATE_2, action) {...}

//======================
// ./action_handlers/three.js

const INITIAL_STATE_3 = new Map({
    baz: 'bat'
});
export default function reducer_3(state = INITIAL_STATE_3, action) {...}

//=======================

4 个答案:

答案 0 :(得分:0)

看起来你正在使用ES6’s Map而不是Immutable's。

答案 1 :(得分:0)

在缩减器中写下以下代码行:

import { Map } from 'immutable';

然后

const INITIAL_STATE_2 = Map({
    foo: 'bar'
});

或者您可以使用

import Immutable from 'immutable';
const INITIAL_STATE_2 = Immutable.Map({
    foo: 'bar'
});

答案 2 :(得分:0)

您是否将问题与Immutable.js Map数据结构或常规Map对象相关联并不是很清楚。

但是,在这两种情况下,Redux的combineReducers都会创建一个普通对象作为根状态。如果您使用的是Immutable.js,则存在redux-immutable包,该包提供combineReducers函数,该函数返回Immutable.js数据结构而不是对象。

答案 3 :(得分:0)

您不能结合使用redux的reducer Redux随附的CombineReducers函数将无法正常工作,因为它不知道如何读取和创建新的状态版本。