我有一個異步reducer結構。在任何一個頁面,我注入的頁面與減速機:與反應路由器異步reducer似乎有多個商店?
export const injectReducer = (store, { key, reducer }) => {
// store.asyncReducers already initialized to {}
// makeRootReducer just returns combineReducers({...store.asyncReducers})
store.asyncReducers[key] = reducer
store.replaceReducer(makeRootReducer(store.asyncReducers))
}
我用react-router 3
和平原路線定義任何給定的網頁上。我用require.ensure
的路線的異步處理中平原路線定義的getComponent
:
export default (store) => ({
path : 'counter',
getComponent (nextState, cb) {
require.ensure([], (require) => {
const Counter = require('./containers/Counter').default
const reducer = require('./modules/counter').default
injectReducer(store, { key: 'counter', reducer })
cb(null, Counter)
}, 'Counter')
}
})
我的問題是,如果我使用dispatch
其次browserHistory.push
,我希望,國家得到纔去到新的頁面更新。然而,會發生什麼呢,似乎有2個獨立的商店。例如,在頁面之間導航時,儘管前一頁的計數器位於同一個鍵上,但它的值似乎仍然保留。這裏發生了什麼???
樣本repo我的問題。你可以git clone
,npm install
,npm start
並去localhost:3000/counter
。如果您點擊Double (Async)
,它會將計數器加倍,然後進入/otherPage
。如果您再點擊Half (Async)
它會將您帶回/counter
。然而,計數器的值是從doubling
的值,而不是從halving
。另外,重要的是,拉起Redux DevTools
並在頁面之間導航似乎顯示之前所有數據的計數器更改。幾乎好像整個商店被替換了,但是先前的價值被保留了下來。
這是怎麼回事?