- LiveViewを使ってるページでmountが二回走るときがある
- ランダムでリソースを出しているページでは表示内容がすすっと切り替わる
def mount
でリソースをランダムでロードしているようなページ
- 二回走るのなんだろう、と気になってたけど実際に問題になるケースに直面した
- さて、なんだろう?
結論
- LiveViewのライフサイクル的に自然なこと
- 初回とJavaScriptロード後の2回実行される
live_redirect
等で遷移したときはJSロード済みなので、1回しか実行されないconnected?(socket)
で判定できる
なので、
- ランダムに切り替わるようなケースでは、
connected?
のときのみにする- 他にいい方法があるような気もしつつ…
- 負荷の大きいロードを行う場合は
connected?()
のときのみにする(検討)- そこまで気にする必要はないかもしれない
また、
- LiveViewなアプリケーション内での移動は
live_redirect to:
にやはり統一する- 癖で
link to:
にしちゃっていないか - ただし、いずれにしてもユーザーでリロードされる可能性もあることも留意する
- 癖で
Phoenix.PubSub.subscribe
などもconnected?()
判定後に(一度だけ)実行する- / 例によって、公式にライフサイクルとして、きちんと書いてある
参考にさせていただいた資料