【React】setState()を実行してもrender()が呼び出されない

今回は、後輩君が開発している React プロジェクトで遭遇した現象についてご紹介。
エラーメッセージが画面に反映されないとのことでお手伝いに行ったのですが、これの原因を突き止めるのがなかなか大変でした…!

 

で、判明した原因は shouldComponentUpdate() 内の処理の不具合でした。

公式サイトの shouldComponentUpdate() の説明はこちら。

React.Component – React
https://ja.reactjs.org/docs/react-component.html#shouldcomponentupdate

こちらを指定すると、shouldComponentUpdate()true が返ったときのみ render() を呼び出すように変更できます。

サンプルコードはこちら。

shouldComponentUpdate(nextProps, nextState) {
  // 任意の処理を追加
  // 必ず return で true/false を返す
  return this.state.name !== nextProps.name || this.state.email !== nextProps.email;
}

こちらを使って、指定した値が変更された時のみ render() を呼び出して画面を再描画を実行するようにしていたのですが、この中にエラーメッセージの変数が定義されていなかったことが原因でした。
そのため、こちらの記述をごっそり削除したところ、問題なくエラーメッセージが反映されるようになりました!
もちろん、shouldComponentUpdate() 内に、エラーメッセージの変数を定義するように修正してもOKです。

上手く使えば便利な機能なのですが…個人的には今回のような不具合の原因にもなるので、なるべく使わない方が良いかなと思っています。
特に、React を使い始めたばかりくらいの人は要注意です。

 

以上、React で setState() を実行しても render() が呼び出されないときの対処方法についてでした。
もちろん、他のことが原因のこともあると思いますが、とりあえず shouldComponentUpdate() がないかと、ある場合は関数内の記述を確認することをおすすめします。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG