2017-06-13 51 views
1

我正在使用與redux-persist的反應,並且遇到了一些麻煩,即如果用戶從/ home到/ search,「Rehydrate」事件被激發兩次。與路線的反應持續存在

所以首先狀態在根上是正確的。然後我改變我的搜索參數。點擊搜索後,我可以看到「Rehydrate」事件被激活,並且它再次改變了應用程序的狀態。

任何想法發生了什麼問題,我能做些什麼來解決它?

下面是我使用

import {Router, Route, browserHistory, Redirect} from 'react-router'; 
import {persistStore, autoRehydrate} from 'redux-persist' 
import {Provider} from 'react-redux'; 
import {compose,createStore, applyMiddleware} from 'redux'; 
import reducers from './reducers'; 
import thunkMiddleware from 'redux-thunk'; 
import promiseMiddleware from 'redux-promise-middleware'; 
import localForage from "localforage"; 


export const store = createStore(
    reducers, 
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(), 
    compose(
     applyMiddleware(
      thunkMiddleware, 
      promiseMiddleware()), 
     autoRehydrate() 
    ) 
); 
const persistor = persistStore(store, {storage: localForage}); 
render(
    <Provider store={store} persistor={persistor}> 
     <Router history={browserHistory}> 
      <Route path="/" component={Home}/> 
      <Route path="/search" component={Search}/> 
     </Router> 
    </Provider>, 
    document.getElementById('root') 
); 

感謝和問候

PS代碼:了Redux狀態的附加的圖像。正如你在搜索被觸發後可以看到的那樣,有一個新的persist/Rehydrate事件。我很幸運,仍然在補救事件後搜索結束 - 但行爲並不好。

enter image description here

回答

0

我不知道如何反應,堅持準確的作品。但我認爲,要exact道具加入到這樣的家庭路線:

<Route path="/" exact component={Home}/> 

否則兩條路線將呈現,也許當每個組件的渲染你看到雙重作用被激發。

+0

我試圖添加確切的道具,但它不能解決問題。我附上了一個反應減少狀態的圖像 – MichaelRazum

0

我看了看文檔,看起來補液動作可能由persistStore()解僱,因此可能不需要autoRehydrate()

自動補水是爲了方便而提供的。在大型應用中, 或一個非典型還原劑成分,自動補液可能不是 方便。在這種情況下,只需省略autoRehydrate。補液 操作仍將由persistStore觸發,然後可通過reducer或使用自定義補液處理程序單獨處理 。

所以嘗試刪除autoRehydrate()

+0

感謝您的幫助!我試圖刪除autoRehydrate(),行爲仍然是相同的(只是打破了一些組件)。我想商店會保存每條路線的狀態。 – MichaelRazum

0

補液非常第二步創造店後,什麼別的東西應該補液回調來完成。

它是persiststore func中的第三個參數。 persistStore(store,[config,callback])

看看使用補液回調是否有幫助。