告诉商店在没有实际数据更改的情况下进行更新
Tell store to update without an actual data change
我正在尝试清理我的 React/Redux 应用程序的引导程序。
我这样创建我的 redux 故事:
store = createStore(reducer, { ...initialState });
在下一行我 subscribe
:
store.subscribe(() => ReactDOM.render(
<App foo={store.getState().foo} />,
document.getElementById('root')
));
当我启动我的应用程序时,App
控件没有出现。我想这是因为我的 subscribe
没有触发,因为还没有数据改变。
我知道我可以将 subscribe
回调移动到一个单独的函数并手动调用它,但我希望不必创建单独的函数。
是否有一种简洁的方法告诉我的 store
对象继续并触发它的 subscribe
回调而不进行显式数据更改?
是,也不是。
存储订阅者在 每次 调用 dispatch()
结束时被调用,而不管状态是否真的被根 reducer 函数改变了。因此,理论上您可以 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()
函数,可以为您抽象出订阅商店的过程。
我正在尝试清理我的 React/Redux 应用程序的引导程序。
我这样创建我的 redux 故事:
store = createStore(reducer, { ...initialState });
在下一行我 subscribe
:
store.subscribe(() => ReactDOM.render(
<App foo={store.getState().foo} />,
document.getElementById('root')
));
当我启动我的应用程序时,App
控件没有出现。我想这是因为我的 subscribe
没有触发,因为还没有数据改变。
我知道我可以将 subscribe
回调移动到一个单独的函数并手动调用它,但我希望不必创建单独的函数。
是否有一种简洁的方法告诉我的 store
对象继续并触发它的 subscribe
回调而不进行显式数据更改?
是,也不是。
存储订阅者在 每次 调用 dispatch()
结束时被调用,而不管状态是否真的被根 reducer 函数改变了。因此,理论上您可以 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()
函数,可以为您抽象出订阅商店的过程。