React Router 升级 v6: Redirect 重定向替代方案

React Router 升级 v6: Redirect 重定向替代方案

React Router v6 Redirect 更新

React Router 的第六版做了许多破坏性的更新,其中一个就是将 <Redirect> 组件移除了。本篇就来介绍一下几个 Redirect 的替代方案

官方推荐方案 1: 使用 Navigate 组件替代

简而言之:直接使用 Navigate 替换原来的 Redirect 组件

  • in v5
<Route path="about" render={() => <Redirect to="about-us" />} />
  • in v6
// in v6
<Route path="*" element={<Navigate to="/" replace />} />

官方推荐方案 2: 自定义 Redirect 组件

更进一步,我们来看一下源码

我们可以看到核心代码其实就是一个 useNavigate 加上一个 useEffect。官方也告诉我们可以仿照 Navigate 组件自己重新实现一个

const Redirect: FC<RedirectProps> = ({ to }) => {
  const navigate = useNavigate();

  useEffect(() => {
    navigate(to, { replace: true });
  });

  return null;
};

// ...

<Route path="*" element={<Redirect to="/" />} />

自定义 Redirect 示例: 防止异常跳转并上报

当然 react router 官方的初衷实际上是希望用户能够更优雅的处理重定向的问题,而不是各种异常境况重定向就完事。因此合并跳转和定向的方法,合成了新的 useNavigate 钩子,让我们能在如上自定义组件内对重定向行为有更详细的描述

下面我们提供一个扩张自定义重定向组件的示例,拒绝非法重定向并向控制台上报错误信息

const Redirect: FC<RedirectProps> = ({ to }) => {
  const navigate = useNavigate();

  useEffect(() => {
    navigate(-1);
    console.error('Bad route');
  });

  return null;
};

我们使用 navigate(-1) 的方式来回到跳转到异常路由前的页面并打印一个错误信息


完整代码示例

https://github.com/superfreeeee/Blog-code/tree/main/front_end/react/react_router_v6_redirect

参考连接

TitleLink
Remove <Redirect>s inside <Switch> - React Router Docshttps://reactrouter.com/docs/en/v6/upgrading/v5#remove-redirects-inside-switch
What about clicking Links that aren’t updated? - React Router Docshttps://reactrouter.com/docs/en/v6/upgrading/reach#what-about-clicking-links-that-arent-updated
Navigate Component - remix-run/react-router - Githubhttps://github.com/remix-run/react-router/blob/7dca9dc38c837ed94796325b1e0582aa72a9313f/packages/react-router/index.tsx#L165-L186
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: React Router v6 中使用 Redirect 组件进行重定向。使用方法如下: ``` import { Redirect } from 'react-router-dom' function SomeComponent() { return <Redirect to="/some-path" /> } ``` 在上面的代码中,当组件 SomeComponent 被渲染时,浏览器将会被重定向到 "/some-path"。 ### 回答2: React-Router-DOM V6React.js 中非常流行的路由管理库,它支持多种路由方式,例如嵌套路由、懒加载、Code Splitting等。除此之外,React-Router-DOM V6 还提供了重定向功能供开发者使用。 重定向指的是在用户访问某个页面时将其自动重定向到另一个页面。在 React-Router-DOM V6 中使用重定向非常简单,只需要在路由配置中添加 <Navigate to=“目标路径” replace/> 组件即可。其中,“目标路径”是你需要将用户重定向到的路径。replace 属性指定使用 push 还是 replace 来进行路由跳转。如果 replace 属性设置为 true,则页面跳转时不会在历史栈中留下记录。 另外,React-Router-DOM V6 还可以在路由组件中使用编程式重定向。这时,你可以通过使用 useNavigate 钩子函数来实现页面跳转,例如: ```js import { useNavigate } from 'react-router-dom'; function ExampleComponent() { const navigate = useNavigate(); function handleClick() { navigate('/target-page'); } return ( <button onClick={handleClick}>跳转到目标页面</button> ); } ``` 在上述示例中,我们定义了一个 handleClick 函数来在用户点击按钮时进行页面跳转。通过 useNavigate 钩子函数获取到 navigate 对象,我们可以非常方便地进行页面跳转。最后,我们将 handleClick 函数绑定到了按钮的 onClick 事件上,这样用户点击按钮时就会进行页面跳转。 总之,React-Router-DOM V6 重定向功能非常方便,支持在路由配置中静态指定重定向路径,也支持在页面组件中通过编程方式实现页面跳转,可以满足大多数项目的路由跳转需求。 ### 回答3: React-Router-Dom v6是一种用于构建单页应用程序的React库,它提供了一种简单而强大的方式来管理多个URL和链接。其中重定向React-Router-Dom v6中非常重要的一个功能,它可以帮助用户在页面上导航时控制页面的显示。 React-Router-Dom v6中的重定向可以在Router组件中使用Route元素来实现。要创建一个重定向,需要使用Redirect元素,并将它包含在Route元素内部。例如: ``` const App = () => { return ( <Router> <Routes> <Route path="/" element={<Home />} /> <Route path="/login" element={<Login />} /> <Route path="/dashboard" element={<Dashboard />} /> <Route path="*" element={<Navigate to="/" />} /> </Routes> </Router> ); }; ``` 在这个例子中,如果用户访问一个不存在的页面,会自动重定向到主页。 可以看到,在使用React-Router-Dom v6时,JavaScript对象的方式被弃用,改为使用新的JSX API,使其更加易于使用和理解。当存在URL重定向时,React-Router-Dom v6将呈现Navigate组件,该组件允许我们向应用程序导航到另一个URL。这也使得代码更加简洁和可读。因此,React-Router-Dom v6可以帮助开发者更好地构建和管理应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值