我编写了这段代码来创建Redux store
import {combineReducers} from 'redux-immutable'
const MyAppReducers = combineReducers({
Node1: Node1Reducer,
Node2: Node2Reducer,
Node3: Node3Reducer,
Node4: Node4Reducer
})
let store = createStore(
MyAppReducers,
composeEnhancers(
applyMiddleware(
thunkMiddleware,
ApiMiddleware,
loggerMiddleware
)
)
)此配置的结果是一个普通对象,它包含在Immutable.Map()的内部:
{
Node1: Immutable.Map(),
Node2: Immutable.Map(),
Node3: Immutable.Map(),
Node4: Immutable.Map()
}相反,我希望所有的状态树都是一个Immutable.Map()。
因此,我试图直接将一个combineReducers()对象传递给Immutable.Map()对象:
const MyAppReducers = combineReducers(Immutable.Map({
Node1: Node1Reducer,
Node2: Node2Reducer,
Node3: Node3Reducer,
Node4: Node4Reducer
}))但是这会在控制台中抛出一个错误:
Uncaught :减速器不是函数 在combineReducers.js:39 在Array.forEach () 在combineReducers.js:36 在Map.withMutations (immutable.js:1353) 在combineReducers.js:35 在computeNextEntry (2:27469) 在recomputeStates (2:27769) 电话:2:31382 按调度(createStore.js:165) 在createStore (createStore.js:240)
redux-immutable的文档指出,我应该将initialState作为createStore函数的第二个参数传递,但我的第二个参数目前是配置中间件和其他东西所需的composeEnhancers函数。
如何使整个状态树成为一个Immutable.Map() 对象?
发布于 2018-01-04 15:51:01
对于可能有同样问题的人来说,完全的解决办法是:
import {combineReducers} from 'redux-immutable'
import {fromJS} from 'immutable'
import { createStore, applyMiddleware } from 'redux';
import ThunkMiddleware from 'redux-thunk'
import {createLogger} from 'redux-logger'
const MyAppInitialState = fromJS({
Node1: {
entities: {},
ui: {}
},
Node2: {
entities: {},
ui: {}
},
Node3: {
entities: {},
ui: {}
},
Node4: {
entities: {},
ui: {}
}
})
const MyAppReducers = combineReducers({
Node1: Node1Reducer,
Node2: Node2Reducer,
Node3: Node3Reducer,
Node4: Node4Reducer
})
const LoggerMiddleware = createLogger()
const store = createStore(
MyAppReducers,
MyAppInitialState,
composeEnhancers(
applyMiddleware(
thunkMiddleware,
ApiMiddleware,
loggerMiddleware
)
)
)
// Example of a reducer (just for completeness)
const Node1Reducer = (state = fromJS({entities: {}, ui: {}}), action) => {
switch (action.type) {
...
default:
return state
}
}有了这个配置,我现在可以使用Immutable.js与Redux一起使用整个state作为Immutable树。
https://stackoverflow.com/questions/48083663
复制相似问题