【发布时间】:2020-12-03 21:44:52
【问题描述】:
我正在尝试为我的 React 应用程序构建一个简单的路由器,它由从对象数组生成的一些路由和一个静态 404 路由组成。要求是每条路线之间的过渡都必须是动画的。
我在浏览器中使用react-router,在浏览器中使用react-transition-group。
我想实现这样的目标(精简的、不完整的伪代码):
const routes = [
{ path: "/", component: Home },
{ path: "/about", component: About },
{ path: "/contact", component: Contact }
];
const createRoute = (route) => {
return (
<CSSTransition className="page" timeout={300}>
<Route path={route.path} exact component={route.component} />
</CSSTransition>
);
}
<Router>
{routes.map(createRoute)}
<CSSTransition className="page" timeout={300}>
<Route component={PageNotFound} />
</CSSTransition>
</Router>
此代码的完整版本可以在此 Codesandbox 上找到:
https://codesandbox.io/s/react-router-switch-csstransition-catch-all-route-bug-forked-qzt9g
我需要使用 <Switch> 组件来防止 404 路由显示在应用程序的所有其他路由中,但是一旦我添加了 <Switch>,动画就会停止工作。
在上面的示例中,尽管遵循了react-router 和react-transition-group 的官方文档中的指南,但您将看到动画在与<Switch> 一起使用时不起作用。
但是,它们在不使用 <Switch> 的情况下完美运行,但当然我最终会一直显示 404 路线。
预期结果:
- 所有路由之间的动画转换,动态创建的以及静态 404 页面
实际结果:
- 根本没有动画或始终显示 404 路线的动画
我花了一整天的时间试图找到解决我遇到的问题的方法。不幸的是,我似乎找不到任何可以远程帮助我解决我面临的问题的东西,我已经在 Google、Stack Overflow、Medium 上进行了搜索,最后我回到了这里,希望有人能帮助我。
【问题讨论】:
标签: reactjs react-router react-router-dom react-transition-group