我可以在组件中使用redux中的createStore()吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以在组件中使用redux中的createStore()吗?相关的知识,希望对你有一定的参考价值。

问题:是否可以在组件中使用redux中的createStore()?如果是这样,如何正确地做到这一点?

我试图通过将这个stopwatch example转换为基于组件的方法来理解react和redux。

最初的方法如下:

let container = Redux.createStore((model = { running: false, time: 0 }, action) => {
  const updates = {
    'START': (model) => Object.assign(model, {running: true}),
    'STOP': (model) => Object.assign(model, {running: false}),
    'TICK': (model) => Object.assign(model, {time: model.time + (model.running ? 1 : 0)})
  };
  return (updates[action.type] || (() => model))(model);
});

const render = () => {
  ReactDOM.render(view(container.getState()),
    document.getElementById('root')
  );
};

到目前为止我得到的是this,它没有显示计数器div。

请注意,我正在尝试理解react和redux背后的原因,从而避免故意使用react-redux

答案

这在技术上是可行的,但这不是你应该怎么做的。

在React中,您希望render方法的输出仅依赖于组件的props和state。所以你想要做的是定义一个组件,它希望在它之外的东西提供道具,然后让Redux成为那个提供者。你可以阅读更多关于它here。您的示例还有另一个问题:Redux希望reducer(传递给createStore的方法)不会改变以前的状态。 Object.assign(state, ...)确实改变了对象,因此需要将其更改为Object.assign({}, state, ...)。更多关于那here

我有一个working snippet给你,但我强烈建议遵循官方指南:)

以上是关于我可以在组件中使用redux中的createStore()吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应中使用redux中的布尔状态值渲染组件?

如何使用 redux-form 在不同组件(向上一个组件)中显示 FieldArray 中的字段

无法在我的组件中调用 redux 操作

Redux / MobX - 我是否需要通过React中的props传递子组件中的数据?

React中路由中的redux和redux拓展

将 React Redux 连接到 Typescript 中的组件