个人学习笔记,按照官方案例自己跑了一遍react-router。通过类比vue-router 写了一些总结, 所以不是很推荐阅读。 建议读者也跟着官方案例走一遍。
react-router包含3个库,react-router、react-router-dom和react-router-native。react-router-dom(浏览器) 和 react-router-native(RN) 都依赖react-router,所以在安装时,react-router也会⾃动安装。react-router-dom v6与v5发生了不兼容性的变更
react-router官方文档老是提到@reach/router 后者v2版本已经合并到了react-router@6推荐看这篇:官方教程*一个通讯录的增删改查的小应用,我按照官方教程自己撸了一遍,代码点击这里,这里简单做一些总结,加强一下记忆,由于本人多年来都是使用Vue搬砖,掌握react-router最快的方式是类比vue-router

vue-router 3与4 的语法糖的异同
useRoute和useRouter等价于this.$route和 this.$routerOptionsAPIreact-router最新版本是6,本文主要是探讨6版本的语法糖,最后在补充一些react-router@6与5版本的区别。
react-router 的element 对应 vue-router的compoentvue还需要在父路由页面模板中放置<router-view/>vue通过 $route.params or useRoute()取值,react这边还需要配置loader({params}),通过params取值loader除获取路由参数,还可以做一些额外的事情,vue-router中没有loader的概念,可以用beforeMout或create模拟实现,然而vue-router中的meta字段,react-router也是要模拟
react-router中只要遇到错误就渲染errorElement,vue中需要模拟实现,1)模拟不存在的路由,2)使用 try...catch 或 errorHandler 捕捉错误然后重定向到错误页面或渲染错误组件react-router { index: true, element: <Index/> },vue-router 使用 v-if/v-else + <router-view/>方式模拟Form 和 action
react-router把一些form的事情(表单提交、搜索)和路由做了挂钩,并提供了一些组件和钩子Form、NavLink、OutletuseLoaderData、useFetcher在Vue中有路由守卫的概念:
- 导航被触发
- 在失活组件调用beforeRouteLeave守卫
- 调用全局的beforeEach守卫
- 再重用的组件调用beforeRouteUpdate
- 在路由配置里调用beforeEnter
- 解析异步路由组件
- 在激活的组件中调用beforeRouteEnter
- 调用全局的beforeResolve
- 导航被确认
- 调用全局的afterEach钩子
- 触发DOM更新
- 调用beforeRouteEnter守卫中传给next的回调函数
react-router没有路由守卫的概念,loader+action可以模拟这些行为
react-touter vs vue-router
<Outlet/> - <router-view><NavLink/> - <router-link>redirect - $router.replace 或路由表里配置 redirectuseNavigation - $router.go、$router.pushsubmit - $router.replace 、$router.push
本文作者:郭敬文
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!