上一篇说到项目初始化配置,这一篇记录下Route和Store的用法
一、技术选型
根据官方文档的推荐,路由的库就直接选用React Navigation了;作为一个前端应用,那么基本的权限管控,登录和未登录页面区分开是最基本的,目前没有需要根据权限显示页面的需求,就暂不考虑,我习惯于将token等用户信息持久化存在cookie/localStorage中,在APP渲染时,将其取出放在store中,所以使用了Redux,作为状态容器,结合实现路由配置。
二、安装依赖
React Navigation的包里包含了许多模块,但有些东西我们暂时还用不到,只安装一些基础的东西即可;
然后是Redux:
三、Store配置
先来创建store的目录:
在reducer目录下创建我们的userReducer.ts:
这个reducer非常简单,包含username
和token
,login
、logout
两个action
,login
将payload中的信息赋给state,logout
则是简单的将state的重置,接下回到store目录,来创建store对象;
再回到源代码目录(我的是js),创建hooks目录,来编写store简单的的hooks;
最后,将store对象通过Provider挂载在根节点(App.tsx)下
这样我们在其他的组件中就可以使用useAppSelector
来读取state、useAppDispatch
来提交变更了,如下:
四、Navigation配置
基础路由
先来创建一个简单的navigation:
Auth路由
上面的Screen就是对应的一个个路由,name为唯一的标识,component是对应的页面组件,options为路由的配置对象,下面我们来加上登录的校验:
上面是官方推荐的做法,在此基础上我们可以再用Group做一层包装:
通用配置
基础的创建路由就完成了,我们还可以再Navigator上进行一些通用的配置,比如header标题的位置、切换的动画等等;
screenOptions还支持function的参数,具体可见官方文档;
组件中的使用
下面讲讲如何在组件中使用navigation和route,进行页面跳转、传参、读参;
首先是获取navigation和route方式,一般有两种种常用的方式:
推荐使用第二种,useNavigation
和useRoute
在Screen的子组件中也是可以调用的,使用起来比较方便;
然后是参数
最后补充一下关于结合TypeScript的使用;
TS的话首先需要定义Screen 的参数类型:
然后在获取navigation和route的时候使用rn navigation提供的辅助类型定义对应的类型;