【react】時間のかかる非同期処理の前でsetStateは非推奨

react-onsenuiのダイアログ機能を使ってバリデーション処理を作っていたのですが

ダイアログを閉じた直後にクラッシュする不具合に遭遇。

TypeError: Cannot read property ‘hide’ of null

 

hideって何が隠れているのか分からないしそんなDOM作った覚えないしで

手詰まりだったのですが

同じ構成だった別ファイルのソースコードと見比べてみると

tryの前でsetStateをしていたのが発覚。ここで重い処理をしていたらもしかしてと思い

外してみるとまさにビンゴでした。

 

reactはページ移動の際にデフォルトでダイアログが閉じるようになっているようで

try/catchの寸前でthis.state({isDialog: !this.state.isDialog})を追加、つまり

二重にsetStateしてしまい、ダイアログを閉じようとしたstateは既に遷移した後に行われるので

ダイアログ(DOM)は存在せず

nullになってしまうというからくりでした。

 

処理に時間がかかる非同期処理の寸前でsetStateをしないだけでこのような事故を

回避することができます。

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

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

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

CTR IMG