我正在尝试清理我的React / Redux应用程序的bootstrapping。
我创建了这样的redux故事:
store = createStore(reducer, { ...initialState });
在下一行我subscribe
:
store.subscribe(() => ReactDOM.render(
<App foo={store.getState().foo} />,
document.getElementById('root')
));
当我启动应用程序时,App
控件的呈现没有发生。我想这是因为我的subscribe
没有被解雇,因为还没有数据发生变化。
我知道我可以将subscribe
回调移动到一个单独的函数并手动调用它,但我希望不必创建单独的函数。
是否有一种干净的方式告诉我的store
对象继续进行并触发subscribe
回调而不进行明确的数据更改?
答案 0 :(得分: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的基本知识并尝试了解它们的工作方式,否则您实际上不应该手动订阅商店。相反,您应该使用官方的React-Redux库,它提供了一个connect()
函数,可以为您抽象订阅商店的过程。