備忘録。
TypeScript + React.js で書いていると
TypeError: Cannot read property 'setState' of undefined
とのエラーが出た。
もとの(エラーが出た)コード
interface IState {
message: string
}
class App extends React.Component<{}, IState, any> {
constructor(props: {}) {
super(props)
this.state = {
message: "The button has not been clicked yet."
}
}
public render() {
return (
<button onClick={ this.onClickButton }/>
<p>{ this.message }</p>
)
}
private onClickButton() {
this.message = "The button has been clicked!"
}
}
対応
2つ方法があるらしい。
1つめ
bind
する
constructor() {
super(props)
this.state = {
message: "The button has not been clicked yet."
}
this.onClickButton = this.onClickButton.bind(this)
}
参考: Reactで Uncaught TypeError: Cannot read property 'setState' of undefined と怒られる場合の対処法
2つめ
アロー関数にする
private onClickButton = () => {
this.setState({
message: "The button has been clicked!"
})
}