【发布时间】:2020-07-20 04:16:18
【问题描述】:
我开始使用 React-Router v6,并遇到了动画路由转换的问题。
react-router docs 和react-transition-group docs 都指定了与新 v6 api 不兼容的方式。
主要原因似乎是删除了<Switch> 组件。
在 react-router@v5 中,这有效:
import { Router, Route, Switch, useLocation } from 'react-router@v5'
import { TransitionGroup, CSSTransition } from 'react-transition-group'
function App() {
const location = useLocation();
return (
<Router>
<TransitionGroup>
<CSSTransition key={location.key} classNames="fade" timeout={300}>
<Switch location={location}>
<Route path="/a" children={<A />} />
<Route path="/b" children={<B />} />
</Switch>
</CSSTransition>
</TransitionGroup>
</Router>
);
}
...但是,在 react-router@v6 中,这不起作用:
function App() {
const location = useLocation();
return (
<Router>
<TransitionGroup>
<CSSTransition key={location.key} classNames="fade" timeout={300}>
<Routes location={location}>
<Route path="/a" element={<A />} />
<Route path="/b" element={<B />} />
</Routes>
</CSSTransition>
</TransitionGroup>
</Router>
);
}
似乎主要区别在于<Switch> 接受Location 属性的方式,并将保持两条路由渲染足够长的时间以完成转换。
没有它,似乎路线入口动画很突然。有趣的是,嵌套路由的退出动画似乎可以正常工作。
任何想法如何使用 react-router v6 获得过渡动画?
【问题讨论】:
标签: javascript reactjs react-router react-transition-group