2017-08-30 80 views
0

我正在嘗試清理我的React/Redux應用程序的引導。在沒有實際數據更改的情況下告訴商店更新

創建我的終極版的故事是這樣的:

store = createStore(reducer, { ...initialState }); 

而且對我subscribe下一行:

store.subscribe(() => ReactDOM.render(
    <App foo={store.getState().foo} />, 
    document.getElementById('root') 
)); 

當我開始我的應用程序時,App控制的呈現沒有發生。我想這是因爲我的subscribe沒有發射,因爲沒有數據發生變化。

我知道我可以將subscribe回調移動到一個單獨的函數並手動調用它,但我希望不必創建單獨的函數。

是否有一個乾淨的方式告訴我的store對象繼續並啓動它的subscribe回調而不進行明確的數據更改?

回答

1

是的,沒有。

的末尾調用存儲訂戶時,每調用一次調用dispatch(),而不管狀態是否實際上是由根減速器函數改變的。所以,你理論上可以做dispatch({type : "DUMMY_ACTION_NO_REDUCER_CARES_ABOUT"}),這將觸發用戶。

但是,這真的沒有意義。這是更簡單的事:

const renderApp = () => { 
    ReactDOM.render(
     <App foo={store.getState().foo} />, 
     document.getElementById('root') 
    ); 
}; 

store.subscribe(renderApp); 
renderApp(); 

除此之外,除非你只是有反應,終極版的裸基礎實驗各地,並試圖瞭解他們是如何工作的,你不應實際手動訂閱到店。相反,您應該使用官方的React-Redux庫,該庫提供了一個connect()函數,可以抽象出爲您訂閱商店的過程。

相關問題