前言

在平时H5或者RN开发时,我们业务场景中大部分都不是单页面的需求,那这时我们就能使用路由在进行多页面的切换。下面会对比一下react路由和RN路由的本质区别和使用方法。

路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程

React路由

简介

使用React构建的单页面应用,要想实现页面间的跳转,首先想到的就是使用路由。在React中,常用的有两个包可以实现这个需求,那就是react-router和react-router-dom。本文主要针对react-router-dom进行说明

在根组件上配置路由,引用react-router-dom结构{ HashRouter as Router, Route ,Link ,Redirect ,Switch },HashRouter组件是路由的根组件,定义属性和方法传递给子组件。Router组件进行路由,指定每个路由跳转到相应的组件。Link组件指定跳转链接。Redirect组件路由重定向,不管什么情况下,都会跳转当前指定的路径,和switch组件联合起来一起调用,当路径匹配到路由,不在往下匹配

两类路由

  1. HashRouter:利用监听hash变化(有一个事件hashchange)实现路由切换,它是路由容器,

    渲染子组件,并向下层子组件传递(Context上下文传递)loaction,history等路由信息

  2. BrowserHistory:利用H5Api实现路由切换,是路由容器,渲染子组件,
    并向子组件传递loaction,history等路由信息

路由配置

路由实现原理

  • HashRouter只是一个容器,本身并没有DOM结构
  • 它渲染的就是它的子组件,并向下层传递location
  • 组件挂载完成之后根据hash改变pathname的值,如果没有hash值就默认展示根组件
  • 需要跳转路由页面时我们使用link或者push去赋值hash的pathname 如this.props.history.push({ pathname: preview, param: { pic, index } });
  • 当hash值发生变化的时候会通过hashchange捕获变化,并给pathname重新赋值
  • 拿到上下文中传过来的location,然后取出pathname。再对它的子组件进行遍历,如果子组件的path属性和当前上下文中传过来的pathname属性相匹配就进行渲染,若不匹配就返回null。

总结

React路由是实质就是,根据遍历识别路由的pathname,来切换router路由容器中component组件的加载渲染。每次更改pathname就都是组件的重新渲染流程,页面也都会呈现出刷新的效果。

RN路由

简介

  • RN把导航和路由都集中到了react-navigation库里面

  • 组件使用堆栈式的页面导航来实现各个页面跳转

  • 构造函数:StackNavigator(RouteConfigs, StackNavigatorConfig)

    • RouteConfigs:页面路由配置
    • StackNavigatorConfig:路由参数配置

路由配置

参数详解

navigationOptions:配置StackNavigator的一些属性。title:标题,如果设置了这个导航栏和标签栏的title就会变成一样的,不推荐使用header:可以设置一些导航的属性,如果隐藏顶部导航栏只要将这个属性设置为nullheaderTitle:设置导航栏标题,推荐headerBackTitle:设置跳转页面左侧返回箭头后面的文字,默认是上一个页面的标题。可以自定义,也可以设置为nullheaderTruncatedBackTitle:设置当上个页面标题不符合返回箭头后的文字时,默认改成"返回"headerRight:设置导航条右侧。可以是按钮或者其他视图控件headerLeft:设置导航条左侧。可以是按钮或者其他视图控件headerStyle:设置导航条的样式。背景色,宽高等headerTitleStyle:设置导航栏文字样式headerBackTitleStyle:设置导航栏‘返回’文字样式headerTintColor:设置导航栏颜色headerPressColorAndroid:安卓独有的设置颜色纹理,需要安卓版本大于5.0gesturesEnabled:是否支持滑动返回手势,iOS默认支持,安卓默认关闭screen:对应界面名称,需要填入import之后的页面mode:定义跳转风格card:使用iOS和安卓默认的风格modal:iOS独有的使屏幕从底部画出。类似iOS的present效果headerMode:返回上级页面时动画效果float:iOS默认的效果screen:滑动过程中,整个页面都会返回none:无动画cardStyle:自定义设置跳转效果transitionConfig: 自定义设置滑动返回的配置onTransitionStart:当转换动画即将开始时被调用的功能onTransitionEnd:当转换动画完成,将被调用的功能path:路由中设置的路径的覆盖映射配置initialRouteName:设置默认的页面组件,必须是上面已注册的页面组件initialRouteParams:初始路由参数

路由首页

react:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1wX7YpJ3-1590981885923)(https://tva1.sinaimg.cn/large/007S8ZIlly1gfcmbj9vm5j30he042dgg.jpg)]

在react中初始化时没有指定hash值,route会匹配路由表里面的根组件”/”

RN:

RN 需要在StackNavigatorConfig里面指定首页

RN路由使用

在入口路由列表注册完成之后 在导航器中的每一个页面,都有 navigation 属性 通过提供的navigate方法来提供跳转

navigation

  • 在导航器中每一个页面都有navigation属性,该属性有以下几个属性/方法

  • navigate 跳转到其他页面 常用参数如下

    • routeName 导航器中配置的路由名称
    • params 传递到下一个页面的参数
  • state:state 里面包含有传递过来的参数 params 、 key 、路由名称 routeName

  • setParams 更改当前页面路由参数(后面详细介绍)

  • goBack: 回退可穿参数

navigate

setParams

RN和React路由详解及对比相关推荐

  1. rn php,RN和React路由详解及对比

    前言 在平时H5或者RN开发时,我们业务场景中大部分都不是单页面的需求,那这时我们就能使用路由在进行多页面的切换.下面会对比一下react路由和RN路由的本质区别和使用方法. 路由(routing)是 ...

  2. React 路由详解(超详细详解)

    React React 路由 对SPA的理解 1.单页Web应用(single page web application,SPA). 2.整个应用只有一个完整的页面. 3.点击页面中的链接不会刷新页面 ...

  3. React Router路由详解

    React Router路由详解 一.基础 1.安装使用 2.React Router 中通用的组件 路由组件 BrowserRouter 和 HashRouter 路径匹配组件: Route 和 S ...

  4. Ocelot简易教程(三)之主要特性及路由详解

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9664977.html 上篇<Ocelot简易教程(二)之快速开始2>教大家如何快速跑起来一个 ...

  5. vue路由详解 --基础

    vue路由详解 --基础 1.router-link 和router-view组件 router-link相当于封装了一个a标签 router-view为组件显示的位置 <router-link ...

  6. React 源码系列 | React Context 详解

    目前来看 Context 是一个非常强大但是很多时候不会直接使用的 api.大多数项目不会直接使用 createContext 然后向下面传递数据,而是采用第三方库(react-redux). 想想项 ...

  7. 【存储】SCSI、iSCSI协议详解及对比

    作        者:  @NGDCN 原文链接:[存储]SCSI.iSCSI协议详解及对比 - NGDCN 版        权: 本文由 @NGDCN 于2022-11-11原创发布在 NGDCN ...

  8. elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))

    目录 一.分词器​ 1. 认识分词器 1.1 Analyzer 分析器 1.2 如何测试分词器 2. 内建的字符过滤器(character filter) 2.1 HTML过滤字符过滤器(HTML S ...

  9. angular路由详解

    angular路由 路由 (route) ,几乎所有的 MVC(VM) 框架都应该具有的特性,因为它是前端构建单页面应用 (SPA) 必不可少的组成部分. 那么,对于 angular 而言,它自然也有 ...

最新文章

  1. 数据结构--数组队列的实现
  2. 一起谈.NET技术,C#中int和System.Int32理解总结
  3. localparam和parameter的区别
  4. fastjson 添加key value_Redis中设置了过期时间的Key,那么你还要知道些什么?
  5. VUE的element-ui的使用
  6. mysql select 反选_JQuery实现全选、全不选和反选功能
  7. payara 创建 集群_Payara Micro在Oracle应用容器云上
  8. TestNG+Maven+IDEA 自动化测试(一) 环境搭建
  9. 再次了解深浅拷贝问题
  10. java ftl 模板 输出list_关于在freemarker模板中遍历数据模型ListJavaBean的经验
  11. WEBPACK+ES6+REACT入门(3/7)-react组件以及props
  12. 高分三号卫星相关知识
  13. 怎样删除wps文档计算机信息,文本框删除,wps怎么删除文本框
  14. 关于vega打不开的问题
  15. leetcode 179.最大数
  16. 服务器软件要如何维护
  17. PowerBI强大的数据汇总能力:将几十张Excel二维表批量转换成一维表进行可视化分析
  18. 【NOIP2017提高A组集训10.25】摘Galo (树形dp)
  19. cordon、drain、delete node区别
  20. PCL Super4PCS点云粗配准(源码编译)

热门文章

  1. 让员工、用户粉丝化,从选好社区软件开始
  2. 分析图第四讲5.29
  3. MD5Init-MD5Update-MD5Final
  4. mysql - GTID主从复制
  5. 在linux摸索的过程
  6. 出错提示:“Could not flush the DNS Resolver Cache: 执行期间,函数出了问题”的解决方法...
  7. 【Oracle AWR详解分析-02】
  8. 让VS2008真正支持JQuery的智能感知
  9. 计算机网络信息安全定义,计算机网络与信息安全.pdf
  10. grafana 改端口_grafana配置