環境
- rails8.1
- stimulus
発生していた問題
Turbo Drive はページ遷移時に現在のページをキャッシュとして保存します。
そのため、以下のような現象が起きていました。
- モーダルを開く
- 別のページへ遷移 ← この時点でモーダルが開いた状態のままキャッシュされる
- 同じページに戻る ← キャッシュが復元され、モーダルが再び表示されてしまう
解決策
turbo_driveによりモーダルがキャッシュされる前にキャッシュを削除するようにするために、モーダルのjsの記述に下記を入れ、
// キャッシュの保存する前にモーダルのDOM要素を削除
beforeCache() {
this.element.remove()
}
erb側のdata_acationで設定
data-action="turbo:before-cache@window->modal#beforeCache"
修正後の流れ
- 画面遷移時: turbo:before-cache イベント発火
- data-action により modal#beforeCache() が呼ばれる
- this.element.remove() でモーダルを削除
- モーダルなしの状態でキャッシュを保存