Reactjs 在typescript中反应高阶组件(HOC)

Reactjs 在typescript中反应高阶组件(HOC),reactjs,typescript,higher-order-components,Reactjs,Typescript,Higher Order Components,我正试图用打字机写一篇文章,但是我没有得到正确的定义。我不确定我正在努力实现的目标是否可能 这是我的密码 import * as React from 'react' export default function Ajax<Props, State>(InnerComponent: typeof React.Component): React.ComponentClass<Props & State> { return class extends Inne

我正试图用打字机写一篇文章,但是我没有得到正确的定义。我不确定我正在努力实现的目标是否可能

这是我的密码

import * as React from 'react'

export default function Ajax<Props, State>(InnerComponent: typeof React.Component): React.ComponentClass<Props & State> {
  return class extends InnerComponent<Props & State,any> {
    constructor() {
      super()
      this.state = {
        request: 'initial'
      }
    }
    changeRequest(newRequest) {
      this.setState({request: 'loading'})
    }
    render() {
      return <InnerComponent 
        {...this.props } 
        {...this.state}
        changeRequest={this.changeRequest} 
      />
    }
  }
}
import*作为来自“React”的React
导出默认函数Ajax(InnerComponent:typeof React.Component):React.ComponentClass{
返回类扩展了InnerComponent{
构造函数(){
超级()
此.state={
请求:'首字母'
}
}
变更请求(newRequest){
this.setState({request:'loading'})
}
render(){
返回
}
}
}
如果我只是将道具和状态传递给孩子,它会起作用。但是,我如何编写定义,以便能够将额外的道具传递给包装的组件呢?在本例中,changeRequest属性


谢谢

我相信您只需要将HOC的上下文绑定到changeRequest函数

constructor() {
  ...
  this.changeRequest = this.changeRequest.bind(this)
}
并确保您正在处理
InnerComponent
中的道具。例如

我能够让它工作。但我不确定这是正确的方法。但是现在编译器没有抱怨,代码也可以运行了。 为了让编译器停止抱怨,我不得不将道具添加为javascript对象

这是我的工作代码:

import * as React from 'react'

export default function Ajax<Props, State> (InnerComponent: typeof React.Component): React.ComponentClass<Props & State> {
  return class extends InnerComponent<Props & State, any> {
    constructor() {
      super()
      this.state = {
        request: 'initial'
      }
      this.changeRequest = this.changeRequest.bind(this)
    }
    changeRequest(newRequest) {
      this.setState({request: 'loading'})
    }
    render() {
      return <InnerComponent {...this.props} {...this.state} {...{onCLick: this.changeRequest}}/>
    }
  }
}
import*作为来自“React”的React
导出默认函数Ajax(InnerComponent:typeof React.Component):React.ComponentClass{
返回类扩展了InnerComponent{
构造函数(){
超级()
此.state={
请求:'首字母'
}
this.changeRequest=this.changeRequest.bind(this)
}
变更请求(newRequest){
this.setState({request:'loading'})
}
render(){
返回
}
}
}

你好,保罗,谢谢你的回复。这与绑定上下文无关。您需要绑定以使单击生效。但我的问题是打字。我不知道哪里有问题。包装的组件需要知道所有属性,您不应该在HOC中扩展其属性定义。