个人学习笔记,按照官方案例自己跑了一遍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.$router
OptionsAPI
react-router
最新版本是6,本文主要是探讨6版本的语法糖,最后在补充一些react-router
@6与5版本的区别。react-router
的element
对应 vue-router
的compoent
vue
还需要在父路由页面模板中放置<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
、Outlet
useLoaderData
、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
或路由表里配置 redirect
useNavigation
- $router.go
、$router.push
submit
- $router.replace
、$router.push
本文作者:郭敬文
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!