typescript使用户输入反应setState

时间:2017-10-10 11:49:52

标签: reactjs typescript

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

有人可以向我展示一个工作示例(我没有找到)或更好:文档在哪里?

linter的(第二个)错误是:

  

(54,24):错误TS2322:输入'{onChange:(e:Event)=>无效; }' 不是   可分配给类型   “DetailedHTMLProps,   HTMLInputElement>”。输入'{onChange:(e:Event)=>无效; }' 不是   可分配给'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 个答案:

答案 0 :(得分:5)

更改您的

{'error': 
    [],
    'result': {
          'XXBTZEUR': [[1507633993, '4074.00000', '4074.90000'],
                       [1507633994, '4074.00000', '4075.00000'],
                       [1507634006, '4074.50000', '4075.00000'],
                       [1507634043, '4074.50000', '4074.90000'],
                       [1507634046, '4074.50000', '4075.00000'],
                       [1507634046, '4074.50000', '4075.50000'],
                       [1507634056, '4075.00000', '4075.50000'],
                       [1507634064, '4075.00000', '4075.60000'],
                       [1507634064, '4074.50000', '4075.60000'],
                       [1507634119, '4075.00000', '4075.50000'],
                       [1507634122, '4075.50000', '4075.50000'],
                       [1507635113, '4075.50000', '4075.60000']],
          'last': 1507635113}}

handleChange(e: Event)

handleChange (e: React.FormEvent<HTMLInputElement>)

e.target.name;

另外,您可能想要更改

e.currentTarget.name;

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