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中扩展其属性定义。