Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

製品ごとのキャラクターページ(/product/chara)のブラウザバックの挙動が変 #124

Open
Hiroshiba opened this issue Jan 20, 2023 · 12 comments

Comments

@Hiroshiba
Copy link
Member

不具合の内容

普通のサイトだと、history.pushStateを使った後にpopstateイベントをlistenすると、ブラウザが持つブラウザバックをしてもページが更新されないはず。
でもなぜか更新されてしまう。
gatsbyが原因だと思うけどわからない・・・。

絡み。

再現手順

npm run developで起動中に/product/zundamonなどに移動して、キャラ移動を2回行ったあと、ブラウザバックするとなぞの404ページに飛ばされる。
リロードすると正しく表示される。

期待動作

少なくとも404ページにならない。

その他

原因が全くわからずにいます。
たぶんhistory.pushStateを使うべきではないという思想なのかもしれないけど、ページのフラッシュが入っちゃうので使わざるをえない・・・。
そもそもページのフラッシュが入る方の原因を探るべきかも。

@Hiroshiba
Copy link
Member Author

@k-chop さんはモーダル周りでこのあたりに遭遇されたりとか、もしくは原因をご存知だったされませんか。。

(諦めるつもりですが、なぜダメなのかわからずにもやもやしています 😇 )

@k-chop
Copy link
Contributor

k-chop commented Jan 21, 2023

最初pushStateでどうにかしようとしていたときに遭遇した覚えがあります!!

Gatsby(で使ってるreach/router)がpushState/popStateを使って遷移を実現しているので、
それらと競合するから用意されてるnavigateを使わないとだめなんだろうな、という理解でした。

image

@k-chop
Copy link
Contributor

k-chop commented Jan 21, 2023

手元でコメントアウト部分有効にしたりして試してみましたが、
navigate使ってもヘッダーがフラッシュしないようになっていればよさそう?なのでそっちを見てみます

EDIT: ヘッダーフラッシュは抑制できました #125 (comment)
でもアニメーションがほぼ死んでしまう・・・

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Jan 21, 2023

色々お試しありがとうございます!!
コメント先のリンクの通り、たしかにgatsby-plugin-transition-linkでできそうな雰囲気がありますね!!
(もうメンテされてなさそうですが。。。)

ちょっとやる気になったらやってみようかなと思います!
(もし興味があったら挑戦してみて頂いてももちろんOKです!自分でやるときは自分をassingしてお知らせする感じで!)

@k-chop
Copy link
Contributor

k-chop commented Jan 22, 2023

slide2.mp4

今日framer motionを使って実現できるか試していたんですが、こんな感じ↑になりました。
参考情報

  • 元のアニメーションと結構感じが違う
    • ページ遷移挟む関係で同時にアニメーションを展開できなかった
    • よって前と次の立ち絵が両方 opacity: 0 になる瞬間があり、ちょっとフラッシュ感がある
  • ブラウザバック時のキャラが流れて行く方向が制御しきれなかった
    • 左に消えて左から出てきたりする
  • onMouseOverで方向の切り替えしておりスマホだとたぶん一方向にしか流れない
    • div.motion のexit propsを書き換えたあとにページ遷移を発生させる必要があり雑に実装した

という問題があるのですが、もし同じライブラリを使うなら参考にでもなれば...ということでコード差分を置いておきます 🙏
コード差分:https://github.com/VOICEVOX/voicevox_blog/compare/master...k-chop:voicevox_blog:issue124/use-page-transition?expand=1

@Hiroshiba
Copy link
Member Author

おーー!!!面白いですね!!!

向きに関しては、やはりページ遷移する関係でreactのstateを持つことができず、left/rightをhistoryのstateに入れるしかないという感じでしょうか。
(以前はどのキャラが表示されるかをhistory stateに持たせて、そこからアニメーションの方向を決めていました。)

となると…contextや親コンポーネントに持たせれば良い…?
いやidからkeyを求める処理を初回アクセス時だけにする…?
いつコンポーネントやcontextが破棄・再作成されるかわからないので、試してみてって感じになりそうですね😇

ありがとうございます、勉強になります!!!

@k-chop
Copy link
Contributor

k-chop commented Jan 22, 2023

向きに関しては、やはりページ遷移する関係でreactのstateを持つことができず、left/rightをhistoryのstateに入れるしかないという感じ

ですです!ページ全体が再renderされてしまうので、history stateで渡すのが楽でした。contextも使えると思います!

context使う場合は一番外側で定義する必要がありそうです
https://developers.altura.co.jp/posts/gatsby-global-context/

@Hiroshiba
Copy link
Member Author

おおー、なるほどです。
Layout等でやると意図が伝わらないかもなので、GlobalComponentみたいなの噛ませてそこでuseContextすると良いかもですね!!
そちらのサイトの方にはBrowserAPIのことも紹介されていました。VOICEVOX blogはSSRではないはずなので不要かもですが、導入しても良いかもですね!

@k-chop
Copy link
Contributor

k-chop commented Feb 11, 2023

現状デプロイされてるの見たのですが、特に問題なくブラウザバックできてますね!
開発環境のみの謎挙動なんでしょうか・・・

https://voicevox.hiroshiba.jp/product/zundamon/

@Hiroshiba
Copy link
Member Author

@k-chop 確認してみた感じ、1回だけ進んで戻ると駄目な感じでした・・・ 😇

VOICEVOX._.-.Google.Chrome.2023-02-12.12-16-26.mp4

@k-chop
Copy link
Contributor

k-chop commented Feb 12, 2023

oh... ほんとですね... 404にはならないけど挙動が変だ

優先度低で急ぎではなさそうなので #124 (comment)#124 (comment) の方向性でこちらで着手してみようと思います。
問題なさそうならassignしていただければ 🙏 (self-assignできなかった)

@Hiroshiba
Copy link
Member Author

おおお!!とても助かります、ぜひお願いしたいです!!!
assignさせて頂きます!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants