【JS/React】setStateがundefinedと怒られる問題
こんにちは、しきゆらです。
最近、怖いと思っていたライブラリやフレームワークは、使ってみると大したことないということに気づき始めました。
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); // <= これが重要 }
これでエラーが出ずに更新できるはずです。
わかってしまえば案外簡単ですが、そうでないと無駄に時間がかかってしまいますよね。
今回はここまで。
おわり