告诉商店在没有实际数据更改的情况下进行更新

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() 函数,可以为您抽象出订阅商店的过程。