今回は、後輩君が開発している 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() がないかと、ある場合は関数内の記述を確認することをおすすめします。
ご参考になれば幸いです。