我的编程空间,编程开发者的网络收藏夹
学习永远不晚

React-Router6版本更新引起的路由变化怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

React-Router6版本更新引起的路由变化怎么用

这篇文章主要介绍了React-Router6版本更新引起的路由变化怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React-Router6版本更新引起的路由变化怎么用文章都会有所收获,下面我们一起来看看吧。

    React Router应该是React生态系统中最受欢迎的库了,npm周下载量达600w+,github也有45.2k的加星,足以说明它是一款非常优秀的库,作为React社区重要的库,它经历了多次迭代和重大更改,就在上个月,更是迎来了一个大的正式版更新6.x,当前最新为6.0.2,相对比于之前的5.x版本做出了较大改变,不管从用法还是从性能上都有了明显的提升,本文也将用新老版本对比的方式让你能以最快的速度上手新用法

    话不多说,先列出6.0做出的改变之处:

    1. 用法变化

    2. 替换为

    3. 嵌套路由新写法

    4. 推出全新hook,全面拥抱函数组件

    5. 基于对象的路由,实现js配置所有路由

    6. 整体代码比上个版本减小大约70%

    用法变化

    组件变化较大,移除了component与render属性,使用element属性替代,因为与之前的版本代码写法不能兼容,写法区别如下 

      // 5.x用法   <Route path="/home" component={Home} />   <Route path="/login" render={()=><Login/>}/>   // 6.x用法   <Route path="/home" element={<Home/>} />   <Route path="/login" component={<Login/>} />

    替换为

    v6版本移除了 组件,并使用替换,除了能替代 组件的功能外,也做了一些改变,比如所有的都必须包裹在中,否则抛出错误

     // 5.x用法   <Switch>       <Route path="/home" component={Home} />       <Route path="/login" component={Login} />   </Switch>   // 6.x用法    <Routes>       <Route path="/home" element={<Home/>} />       <Route path="/login" component={<Login/>} />   </Routes>

    嵌套路由

    v6版本的react-router支持多种嵌套路由写法,写法分别如下:

    第一种写法:延续v5版本写法,保持原有组件结构 这种写法比较适合重构的项目,不需要改变太多的代码便能过渡到v6版本

      // App.jsx   <Routes>       <Route path="/home" element={<Home/>} />       <Route path="/user/*" element={<User/>} />   </Routes>   // User.jsx   <Routes>       <Route path="profile" element={<UserProfile/>} />       <Route path=":/id" element={<UserDetail/>} />   </Routes>

    虽然组件结构与v5版本一至,但写法上有一定的差异,父组件App.jsx中的path属性最后必须使用星号(path="/user/*"),子组件User.jsx中的路径都是相对于其父级路径,所以不需要像v5版本那样写全整个路径,妈妈再也不用担心我会写错地址。

    另外,如果中的path属性不以/开头,则是相对于其父级路径,这样的好处是使嵌套路由实现变得更加简单,并易于组合复杂的路由和布局

    第二种写法:把所有的写在一起,配合实现路由组件的显示

     // App.jsx   <Routes>       <Route path="/home" element={<Home/>} />       <Route path="/user" element={<User/>}>           <Route path="profile" element={<UserProfile/>} />           <Route path=":/id" element={<UserDetail/>} />       </Route>   </Routes>   // User.jsx   <Outlet/>

    这样写法让我们能更清晰地去了解路由结构,能更好地管理我们的路由,而能让我们能更精确地把嵌套的路由组件布局到需要位置显示

    第三种写法:使用useRoutes()实现路由配置

    使用useRoutes配置路由与配置路由效果一致,只是这种写法使用javascript生成路由,不依赖JSX,返回相应结构的路由组件树,有木有感觉回到了VueRouter?有木有?

     function App(){       // 以下写法与第二种写法效果一至       const element = useRoutes([          {path:'/home',element:<Home/>},          {               path:'/user',               element:<User/>,               children:[                  {path:'profile',element:<UserProfile/>},                  {path:':/id',element:<UserDetail/>},              ]          }      ])       return element  }

    以上三种写法各有各的优点,开发者可以根据自身的需求选择一种来实现你的嵌套路由

    重定向

    新版本的react-router移除了组件,但可以使用新增的组件配合组件实现重定向效果

    <Routes>       <Route path="/home" element={<Home/>} />       <Route path="/" element={<Navigate to="/home"/>}>   </Routes>

    路由跳转

    路由配置好后免不了要进行页面跳转,但新版的react-router移除了history对象,故不能使用v5版本的history(包括useHistory hook)已不能使用,我们可以使用以下两中方式进行跳转

    使用或进行跳转这种方式与上一个版本几乎没有太大的区别,唯一的区别是组件的高亮写法发生了变化

       // v5版本   <NavLink to="/home" activeStyle={{color:'#f00'}}>首页</NavLink>   <NavLink to="/home" activeClassName="active">首页</NavLink>   // v6版本   <NavLink to="/home" style={({isActive})=>(isActive?{color:'#f00'}:{})}>首页</NavLink>   <NavLink to="/home" className={({isActive})=>isActive?'current':''}>首页</NavLink>

    PS: 默认已经有一个高亮的active类,可以直接使用,不需要额外设置
    使用useNavigate()进行跳转有时候我们并不能使用以上两个组件进行跳转,如根据ajax请求返回值跳转不同的页面,这时我们就得使用js的方式时行跳转了,虽然新版的react-router已经移除掉history对象,但给我们提供了 useNavigate hook实现路由跳转,使用方法如下

     import { useNavigate } from "react-router-dom";   let navigate = useNavigate();   navigate(`/home`);   // 跳转且不保留浏览记录   navigate(`/home`,{replace:true});   // 返回上一页   navigate(-1)   // 对象方式跳转   navigate({       pathname:'/home'  })

    需要注意一点就是,在v6版本的react-router中,如果跳转的路径如果不是以/开头,则为相对路径,相对于其父级路由路径,这样的设置能让我们更好的控制跳转

    路由传参

    我们都知道,在进行路由跳转时,可以附带一些参数一起传递到跳转页面,新版的react-router已经从props中移除了history、location、match,也移除掉了withRouter高阶组件,所以无法使用老版本的方式传参与接收,新版用法如下

    search传参

     let navigate = useNavigate();   navigate(`/home?page=1&size=10`);   navigate({       pathname:'/home',       search:'page=1&size=10'  });

    在对应组件接收参数也很简单,使用useSearchParams hook进行接收,得到URLSearchParams对象以及设置search参数函数组成的数据

       function Home(){       const [searchParams,setSearchParams] = useSearchParams()       searchParams.get('page');//1       searchParams.get('size');//10       return (           <div>首页</div>      )  }

    动态路由传参

       <Route path="/user" element={<User/>}>       <Route path=":/id" element={<UserDetail/>} />   </Route>

    配置完以上路由后,当页面跳转到/user/123这个路径时,可以在组件中使用useParams hook获取123这个id

    function UserDetail(){       const {id} = useParams()       return (           <div>id:{id}</div>      )  }

    state传参通过、或 useNavigate进行跳转时,都可以传递state参数,用法如下:

     <Link to="/home" state={{idx:1,key:'qf'}}>首页</Link>   navigate('/home',{state:{idx:1,key:'qf'}})

    在首页组件中通过useLocation hook获取state值

     function Home(){       const {state} = useLocation();       state.idx; // 1       state.key; // qf       return (           <div>首页</div>      )  }

    关于“React-Router6版本更新引起的路由变化怎么用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“React-Router6版本更新引起的路由变化怎么用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    React-Router6版本更新引起的路由变化怎么用

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    React-Router6版本更新引起的路由变化怎么用

    这篇文章主要介绍了React-Router6版本更新引起的路由变化怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React-Router6版本更新引起的路由变化怎么用文章都会有所收获,下面我们一起来看看吧
    2023-06-26

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录