浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【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をしないだけでこのような事故を

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

  • この記事いいね! (0)