typescript与用户输入react setState

IT技术 reactjs typescript
2021-05-01 11:40:56

在这个 typescript react (create-react-app) 的基本示例中,我试图通过用户输入更改 state.name。

有人可以给我看一个有效的例子(我没有找到)或者更好的例子:文档在哪里?

短绒的(第二个)错误是:

(54,24): 错误 TS2322: 类型 '{ onChange: (e: Event) => void; }' 不能分配给类型 'DetailedHTMLProps, HTMLInputElement>'。输入 '{ onChange: (e: Event) => void; }' 不能分配给类型 'InputHTMLAttributes'。属性“onChange”的类型不兼容。类型 '(e: Event) => void' 不可分配给类型 'EventHandler> | 不明确的'。类型 '(e: Event) => void' 不可分配给类型 'EventHandler>'。参数“e”和“事件”的类型不兼容。“ChangeEvent”类型不能分配给“Event”类型。“ChangeEvent”类型中缺少“cancelBubble”属性。

import * as React from 'react';
import './Hello.css';

interface Props {
    name: string;
}

interface State {
    name: string;
}

class Hello extends React.Component<Props, State> {

public static defaultProps = {
    name: 'John',
};

constructor(props: Props) {
    super(props);
    this.state = {
        name: props.name,
    };
    this.handleChange = this.handleChange.bind(this);
}

handleChange(e: Event): void {
    this.setState({
        name: e.target.value //Error : property 'value' does not exist on type 'EventTarget'
    });
}

render(): JSX.Element {
    return (
        <div className="hello">
            Hello {this.state.name}
            <input onChange={(e: Event) => this.handleChange(e)} /> //error is at this line
        </div>
      );
   }
}

export default Hello;
1个回答

改变你的

handleChange(e: Event)

handleChange (e: React.FormEvent<HTMLInputElement>)

e.target.name;

e.currentTarget.name;

此外,您可能想要更改

 <input onChange={(e: Event) => this.handleChange(e)} />

 <input onChange={this.handleChange} />