0
このコードを使用すると、エラーProperty 'type' does not exist on type 'EventTarget'
が発生します。 checked
,value
およびname
についても同様です。React TypeScript 2.3 - > typesafe React Bootstrap FormControl onChange
コードに続いて、FormEvent
はSyntheticEvent
から継承し、順番にtarget: EventTarget
となります。 EventTargetには、私が行ったプロパティはありません。代わりにevent
をany
(event: any
)とマークすると、コードは問題なく動作します。これをどうすれば解決できますか?私は通常のHTML入力で試してみた後、イベントをReact.ChangeEvent<HTMLInputElement>
として設定しました。
handleChange(event: React.FormEvent<React.Component<ReactBootstrap.FormControlProps, {}>>) {
const target = event.target;
const value = target.type === 'checkbox' ? target.checked : target.value;
const name = target.name;
this.setState({
[name]: value
});
}
...
<FormGroup controlId="Email">
<Col componentClass={ControlLabel} sm={2}>
Email
</Col>
<Col sm={10}>
<FormControl name="email" type="email" value={this.state.email} onChange={(event) => this.handleChange(event)} placeholder="Email" />
</Col>
</FormGroup>
:
handleChange(event: React.ChangeEvent<HTMLInputElement>) {
...
}
...
<input
name="email"
type="email"
value={this.state.email}
onChange={(event) => this.handleChange(event)} />
'onChange'イベントハンドラで脂肪の矢印を使用する利点は何(すなわち'のonChange = { (イベント)=> this.handleChange(イベントは任意のもの)} ')vsちょうど' onChange = {this.handleChange} '? –
おっと!さて、私はなぜあなたが第二の選択肢を使うことができないのか分かります。イベントタイプは、TypeScript 2.Xコンパイラと互換性がありません。 –
これは、矢印関数に独自の 'this'または' arguments binding'がないために使用します。 'this.setState'はそうでなければ動作しません。私は同じことを達成するためにバインドを使用することができますが、私はこれがきれいだと思う。 https://facebook.github.io/react/docs/handling-events.html – Ogglas