我有 react-redux 应用程序,我需要在布局中注入一些状态和化简器。我有路线 -
export const createRoutes = (store) => ({
path : '/',
component : CoreLayout,
indexRoute : Index(store),
childRoutes : [
....
]
而且我的核心布局组件需要是一个组件,我不能像方法一样使用它,因为我遇到了错误。其无效 -
getComponent (nextState, cb) {
require.ensure([], (require) => {
const Layout= require('./containers/CoreLayoutContainer').default;
const reducer= require('../../modules/reducer').default;
injectReducer(store, { key: 'layout', reducer})
cb(null, Layout)
}, 'SongsList')
我最大的问题是,如果我尝试使用容器创建布局
const mapDispatchToProps = {
changePlaybackTime: (newTime) => changePlaybackTime(newTime),
}
const mapStateToProps = (state) => ({
currentSongId: state.songs.player.currentSongId,
isPaused : state.songs.player.isPaused,
isPlaying: state.songs.player.isPlaying,
})
export default connect(mapStateToProps, mapDispatchToProps)(CoreLayout)
每次在mapStateToProps
我都会得到化简器的状态,我在当前路由的getComponent(nextState, cb)
方法中定义了该状态。如何将自己的减速器注入布局?谢谢。
UPD: 显示喷射减速器功能:
import { combineReducers } from 'redux'
export const makeRootReducer = (asyncReducers) => {
return combineReducers({
//you can add global reducers here and got it everywhere
...asyncReducers
})
}
export const injectReducer = (store, { key, reducer }) => {
if (Object.hasOwnProperty.call(store.asyncReducers, key)) return
store.asyncReducers[key] = reducer
store.replaceReducer(makeRootReducer(store.asyncReducers))
}
因此,
如果有人强制执行这个问题 - 没有办法在布局中注入 dynamyc reducer,但如果您需要在应用程序的整个生命周期内使用任何减速器,您可以全局注入该减速器。