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

时间:2017-08-30 15:16:41

标签: reactjs redux store

我正在尝试清理我的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回调而不进行明确的数据更改?

1 个答案:

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