ReactRouter v6升级的步骤

2024-07-21 1046阅读

React Router v6 引入了一个 Routes 组件,它有点像 Switch ,但功能要强大得多。与 Switch 相比, Routes 的主要优势在于:

ReactRouter v6升级的步骤
(图片来源网络,侵删)
  •  中的所有  和  都是相对的。这导致在  和  中的代码更精简和更可预测。
  • 路由的选择基于最佳匹配,而不是按顺序遍历。这避免了由于在  中定义较晚而导致无法到达的错误。
  • 路由可以嵌套在一个地方,而不是分散在不同的组件中。在中小型应用程序中,这样可以方便地一次性查看所有路由。在大型应用程序中,您仍然可以通过 React.lazy 动态加载将路由嵌套在打包中。

    v6,您需要将所有  元素转换为  。

    首先,让我们来谈谈 v6 中的相对路由和链接。

    v5 是这样写:

    // This is a React Router v5 app
    import {
      BrowserRouter,
      Switch,
      Route,
      Link,
      useRouteMatch,
    } from "react-router-dom";
    function App() {
      return (
        
          
            
              
            
            
              
            
          
        
      );
    }
    function Users() {
      // In v5, nested routes are rendered by the child component, so
      // you have  elements all over your app for nested UI.
      // You build nested routes and links using match.url and match.path.
      let match = useRouteMatch();
      return (
        
          
            My Profile
          
          
            
              
            
            
              
            
          
        
      );
    }

    v6需要这个样子:

    // This is a React Router v6 app
    import {
      BrowserRouter,
      Routes,
      Route,
      Link,
    } from "react-router-dom";
    function App() {
      return (
        
          
            
            
          
        
      );
    }
    function Users() {
      return (
        
          
            My Profile
          
          
            
            
          
        
      );
    }

    v5 应用程序中的所有  在 v6 中都变为了 

    对于子路由,index设置为true时,相当于一个默认的子路由

    关于  模式的注意事项​

    React Router v6 使用简化的路径格式。在 v6 中,  只支持两种占位符:动态 :id 样式的参数和 * 通配符。 * 通配符只能在路径末尾使用,不能在中间使用。

    /groups

    /groups/admin

    /users/:id

    /users/:id/messages

    /files/*

    /files/:id/*

    在 v6 中,无论当前 URL 如何,  都会呈现相同的  。 

    使用useRoutes代替react-router-config​

    v5 版本的 react-router-config 包中的所有功能都已移至 v6 的核心中。如果您喜欢/需要将路由定义为 JavaScript 对象,而不是使用 React 元素,那么您一定会喜欢这个功能。

    function App() {
      let element = useRoutes([
        // These are the same as the props you provide to 
        { path: "/", element:  },
        { path: "dashboard", element:  },
        {
          path: "invoices",
          element: ,
          // Nested routes use a children property, which is also
          // the same as 
          children: [
            { path: ":id", element:  },
            { path: "sent", element:  },
          ],
        },
        // Not found routes work as you'd expect
        { path: "*", element:  },
      ]);
      // The returned element will render the entire element
      // hierarchy with all the appropriate context it needs
      return element;
    }

    使用useNavigate代替useHistory​

    React Router v6 引入了新的导航 API,该 API 与  同义,可更好地兼容启用了悬念的应用程序。根据您的风格和需求,我们提供了该 API 的命令式和声明式版本。

    useHistory 更改为 useNavigate ,并更改 history.push 或 history.replace 调用站点。

    // This is a React Router v6 app
    import { useNavigate } from "react-router-dom";
    function App() {
      let navigate = useNavigate();
      function handleClick() {
        navigate("/home");
      }
      return (
        
          go home
        
      );
    }

    注意:请注意,v5 版  默认使用 replace 逻辑(可通过 push 属性进行更改),而 v6 版  默认使用 push 逻辑,可通过 replace 属性进行更改。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]