使用自己的减速器反应布局



我有 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,但如果您需要在应用程序的整个生命周期内使用任何减速器,您可以全局注入该减速器。

最新更新