react-router と ReactCSSTransitionGroup を組み合わせてページ遷移時のアニメーションを実装したメモ。
サンプルを参考に進めれば容易であった。
しかし細かい挙動に凝り始めると、提供されているハイレベルなAPIでは難しくなってくる。
今回はページ遷移時にスクロールポジションが維持されてしまう問題の修正に少しハマった。
結果的に react-router 側を微調整して完了となった。
1 window.scrollTo(0, 0)} history={createBrowserHistory()}> 2 ...</Router>
これでページ遷移時に強制的にスクロールポジションをトップへ固定することができる。
ただこの方法だとブラウザバックの際にも window.scrollTo(0, 0) が発動してしまいユーザビリティが損なわれる。
結果的に下記の方法を採用した。
1const history = createBrowserHistory();
2history.listen(location => {
3  setTimeout(() => {
4    if (location.action === 'POP') {
5      return;
6    }
7    
8    window.scrollTo(0, 0);
9  });
10});
11
12const routes = (
13  // ...  </Router>
14);
これでブラウザバック時は前回のスクロールポジションを維持することができる。
ちなみに下記のようなものもあるらしい。