reactjs - 如何使用柯里化(Currying)在React中创建HoC并同时连接到Redux存储?

标签 reactjs react-redux currying

我正在使用 React 和 Redux 以及 react-redux,并且我在 React 中创建一个高阶组件,我想将其连接到 Redux 存储,如下所示:

const HoC = parameter => WrappedComponent => 
    return class WithSelected extends Component {

    // ..some use of 'parameter'

    render() { 

         return <WrappedComponent />

     }

  [...]

  const exportComponent = compose(
      connect(mapStateToProps),
      HoC
   )

 export default exportComponent;

import Component from '../Component'
import exportComponent from '../file'

const componentToExport = exportComponent('someValue')(Component);

现在,这种方法会出现以下错误:

TypeError: Object(...) is not a function

顺便说一句,如果我不使用柯里化(Currying)创建临时,它会起作用,如下所示:

const HoC = (parameter, WrappedComponent)  => [etc]

import Component from '../Component'
import exportComponent from '../file'

const componentToExport = exportComponent('someValue', Component);

它有效。但是如何在 React 中使用柯里化(Currying)创建 HoC 并同时使用 Redux?

最佳答案

柯里化(Currying) HOC 没有什么问题。以下是有效的高阶组件

const withHoc = param => Component => props =>{
  return <Component {...props} foo={param} />
}

您的问题是撰写。最右边的参数将为生成的组合函数提供签名,实际上是对另一个 HOC 求值,而不是组件本身。

<小时/>

您应该连接返回的组件

const HoC = parameter => WrappedComponent => connect(...)(props =>{
    /*...*/
})

返回基于类的组件与返回功能组件相同

const HoC = parameter => WrappedComponent => connect(...)(class X extends Component{
    render(){ return <div /> }
})

只是不是那么漂亮

关于reactjs - 如何使用柯里化(Currying)在React中创建HoC并同时连接到Redux存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58960692/

相关文章:

reactjs - 通过 Redux 获取数据后应用程序重新启动

javascript - Redux const { var1, var2 } = this.props;

function - 当非 curry 形式已知时,在haskell中进行柯里化(Currying)

haskell - 我如何手动确定以下功能的最一般类型?

javascript - `the page is being unloaded` 错误

reactjs - 如何在 ReactBootstrap 中向 NavDropdown 添加 Glyphicon

reactjs - React-bootstrap FormControl 选择占位符

html - React JS 在带有reactstrap的页面中多次使用bootstrap轮播

redux - 为什么不是 "pre-connect"Redux Action Creators?

javascript - 以不同的顺序绑定(bind)参数