创建一个可重用的Redux包装器

芦丁酸盐3

我正在使用Webpacker和react-rails的RoR项目中工作。我们正在逐步从haml转向React。因此,我们正在做的每个页面我们react_component('page_to_render')也在使用Redux,我一直在Provider中直接调用我的组件,并且运行良好。由于我们使用这种方式的原因,从某种意义上讲,每个页面都是它自己的React应用程序,我正在尝试制作一个可重用的组件来传递商店。我的想法是:

import React, { Component } from 'react'
import { Provider } from 'react-redux'

import store from './store'

class ReduxState extends Component {
  render() {
    return (
      <Provider store={store}>
        {this.props.children}
      </Provider>
    )
  }
}
export default ReduxState

因此,对于每个页面,我们只需要将其包装在中<ReduxState></ReduxState>,但是当我这样做时,我得到:

Could not find "store" in the context of "Connect(BillingPage)". Either wrap the root component in a <Provider>, or pass a custom React context provider to <Provider> and the corresponding React context consumer to Connect(BillingPage) in connect options.

似乎应该将存储传递给任何包装的东西,但事实并非如此。我觉得我可能缺少有关Redux工作原理的信息。有没有更好的方法来解决这个问题?

芦丁酸盐3

在深入了解我的错误之后,我意识到我正在JSX中返回Provider,并且BillingPage该类本身没有对ReduxState

我意识到我需要一个HOC。解决方案如下:

import React, { Component } from 'react'
import { Provider } from 'react-redux'

import store from './store'

const ReduxState = WrappedComponent => {
  return class extends Component {
    render() {
      return (
        <Provider store={store}>
          <WrappedComponent {...this.props} />
        </Provider>
      )
    }
  }
}

export default ReduxState
const composedHoc = compose(
  ReduxState,
  connect(
    mapStateToProps,
    {
      addBill,
      removeBill
    }
  )
)

export default composedHoc(BillingPage)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建一个可重用的类

创建一个可重用的FormGroup

如何在 Blazor 中重用标记包装器,而不创建另一个组件

如何创建一个可重用的张量流操作

创建一个可重用的组件 reactjs

创建一个使用速度的可重用解析方法

创建一个可重用的 antd 表如何反应

在包装另一个指令的可重用组件Angular指令中,如何使模型“通过”?

在 Typescript 中创建一个 fetch 包装器

创建一个JavaFX场景包装器

为 React 组件创建一个纯包装器

在Python中创建使用另一个包装器的包装器

我们如何在Keras中创建一个块(可重用的函数集)?

创建一个可重用的函数以打开并发送Ajax

如何在reactjs的另一个应用程序中创建可重用组件?

c# 创建一个可重用的方法来访问对象内部的属性

创建一个 Redux-saga 监听器

可能创建一个“包装”部分?

创建一个C ++宏,可以轻松创建虚函数包装器函数

创建一个React高阶组件,用作子组件的“加载器”(动画)包装器

创建一个通用包装器类,该包装器类将使用lambda表达式调用方法

如何从另一个可重用组件和容器组件访问可重用组件

在另一个可重用组件内传递来自可重用组件的更改

为类创建一个包装器以避免字节中的可变参数

创建一个C数组包装器(更好的std :: array?)

为type_traits类创建一个“求反”包装器

是否有可能围绕&mut创建一个类似于&mut的包装器

如何创建一个可以访问函数及其对象的 JavaScript 包装器?

PHP foreach循环,每一个步骤都会在循环外创建新的包装器