こんにちは、しきゆらです。
最近、怖いと思っていたライブラリやフレームワークは、使ってみると大したことないということに気づき始めました。
Reactさんもその一つです。
基本的なReactの環境構築や使い方をまとめようと思っていますが、今回はちょっとしたメモです。
環境
Webpack、Babelを使ってES6をトランスパイルするという状況です。
Uncaught TypeError: this.setState is not a function
Reactでstateを変更するときにお世話になる関数であるsetState。
この間、stateを変更すべくsetStateを実行していたら「Uncaught TypeError: this.setState is not a function」とエラーが・・・。
コードはこんな感じでした。
import SubComponent from './SubComponent';
class MainComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
data: props.data,
}
}
updateState(data) {
this.setState({
data,
})
}
render(){
return(
<SubComponent
updateState={this.updateState}
/>
);
}
}
Mainの方のデータをSubから更新しようとしています。
このとき、上記のようなエラーが起こりました。
原因と対策
原因は「this.updateState」のthisがundefinedになることが問題のようです。
対策としては、classで定義する場合constructor内でbindしないと行けないようです。
constructor(){
super(props);
this.state = { data: props.data }
this.updateState = this.updateState.bind(this); // <= これが重要
}
これでエラーが出ずに更新できるはずです。
わかってしまえば案外簡単ですが、そうでないと無駄に時間がかかってしまいますよね。
今回はここまで。
おわり