javascript - 以编程方式将重定向添加到 React Router
问题描述
我正在尝试在给定一组旧路由和新路由的情况下添加一堆重定向,所以我提出了这个组件:
const redirectUrls = [
{ oldUrl: '/robin', newUrl: '/users' },
{ oldUrl: '/batman', newUrl: '/courses' }
];
export default Redirects = () => (
redirectUrls.map((url, index) => <Route key={index} exact path={url.oldUrl} render={() => <Redirect to={url.newUrl} />} />)
);
效果很好,但我希望它更简单,所以我删除了Route
并只留下了这样的重定向:
export default Redirects = () => (
redirectUrls.map((url, index) => <Redirect key={index} exact from={url.oldUrl} to={url.newUrl} />))
但这不起作用,所有重定向都将我带到最后一条路线,在这种情况下是/courses
,这很奇怪,因为如果我这样做:
<Switch>
...
<Route path='/users' exact component={users} />
<Route path="/courses" exact component={CoursesList} />
<Redirect from='/robin' to='/users' />
<Redirect from='/batman' to='/courses' /> // having them like this works fine
</Switch>
因此,当我使用地图创建它们并且我没有找到任何导致原因或解决方案的东西时,它们失败是没有意义的。
解决方案
您需要将导出的重定向包装在一个开关中:
const Redirects = () => {
return (
<Switch>
{redirectUrls.map(url => (
<Redirect from={url.oldUrl} to={url.newUrl} />
))}
</Switch>
);
};
export default Redirects;
仅当您确实需要用它们制作组件时。export default Redirects = () =>
由于语法无效,您需要和正在寻找的内容并不完全清楚。如果您只想将它们捆绑为一些变量,您可以执行以下操作:
export const Redirects = redirectUrls.map(url => <Redirect from={url.oldUrl} to {url.newUrl} />);
// App.js
<Switch>
<Route path='/users' exact component={users} />
<Route path="/courses" exact component={CoursesList} />
...
{Redirects}
</Switch>
推荐阅读
- elasticsearch - ElasticSearch 无痛脚本中的 score_ 始终返回 1
- python - 如何在没有写入所有目录的情况下在 python 中压缩文件
- php - PHP为什么会自动重新声明函数的子函数?
- javascript - 为什么我只能从我的位置数组中获得一个标记?
- java - Spring-Security Spotify API。尝试从授权页面重定向会导致“localhost 重定向您太多次。”
- javascript - 获取错误消息作为 WebResource.axd?d=xxxxxxx 未捕获的类型错误:无法设置未定义的属性“值”
- python - 我如何在 Django 中显示我的评论回复
- java - 我们可以从接口内部引用一个类吗?
- jenkins - 在多分支管道上找不到“Jenkinsfile”
- javascript - 订阅 BehaviourSubject 时,如何避免在可观察对象内执行两次承诺?