2016-11-11 73 views
0

我希望能夠在具有不同狀態樹的生產React/Redux應用程序中加載新捆綁包,並容納已登錄的用戶。我想要通過提示這些用戶註銷以便我可以重置狀態樹來完成此操作。在生產中的現有Redux商店中保留版本號

我的做法


通過傳承來自節點版本,我可以配置店裏插入version: {latest: VERSION, current: null}鑰匙插入的狀態樹(或沒有)版本密鑰。當我從本地存儲裝載用戶現有狀態時(只會在用戶重新連接到節點服務器時發生),才能將其「劫持」到狀態樹中。

const {VERSION} = process.env; 

const preloadedState = loadStateFromLocalStorage(); 

const browserVersion = (preloadedState.version && preloadedState.version.current) || null; 

const store = createStore(
    rootReducer, 
    Object.assign({}, preloadedState, {version: {latest: VERSION, current: browserVersion}}), 
    middleware 
); 

然後我可以檢查我的AppContainer成分(因爲它的認證後貼裝頭組件)爲latest版本兌current版本。

class AppContainer extends React.Component { 
    componentDidMount() { 
     this.props.dispatch(checkForUpdates()); 
    } 
    componentDidUpdate() { 
     this.props.dispatch(checkForUpdates()); 
    } 
    render() { 
     return <App {...this.props} /> 
    } 
} 

checkForUpdates()會提示一個模式,指示用戶必須註銷才能繼續。註銷會將整個狀態設置爲{version: {latest: VERSION, current: VERSION}}


這種做法似乎過於複雜,在完成什麼,我試圖完成的,這基本上是(一)通知升級的用戶(二)登錄用戶輸出/淨化階段(C)加載新的,初始狀態從更新的JS捆綁。

這個工作,並說明邊緣情況?這是一個合理的方式來完成一個版本號的狀態樹嗎?

回答

1

任何原因你必須在Redux中做到這一點? [迴應意見]

在執行ReactDOM.render之前,您可以通過使用vanilla JS來比較版本來避免整個reducer和分派。

UPDATE

看看redux-persistredux-persist-migrate。我沒有使用它們,但是它是一個關於redux狀態持久性和遷移的抽象。

+0

我仍然希望DOM樹能夠反映當前會話,並且需要利用狀態樹中的項目,例如模態功能。 – Himmel