react-navigation详解:导航思维及导航策略

广告位招租
扫码页面底部二维码联系

react-native里面用于导航的最未经授权,禁止复制转载。原创内容,盗版必究。知名的库就是react-navigati【原创内容,转载请注明出处】原创内容,盗版必究。on,它非常优雅的把native界面间的转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。切换抽象为几种形式,并且采用配置来解决r【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。eact-native自带导航组件使用复本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。杂的问题。本文并不详细去介绍react-【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】navigation这个组件的使用方法,【作者:唐霜】转载请注明出处:www.tangshuang.net建议你先阅读它的官方文档,并且体验一下它著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】的examples之后,再来阅读本文。本【转载请注明来源】【本文受版权保护】文主要是用以梳理react-naviga本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。tion导航的设计思维,以及给出一些实际【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。开发中,如何安排几种不同形式的导航的组合【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。策略。

未经授权,禁止复制转载。【本文受版权保护】本文作者:唐霜,转载请注明出处。原创内容,盗版必究。【未经授权禁止转载】

导航的本质【原创内容,转载请注明出处】

未经授权,禁止复制转载。原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】

和web界面不同,web界面直接通过ur【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。l确定界面,通过<a>标签实原创内容,盗版必究。未经授权,禁止复制转载。现界面之间的切换。即使在SPA时代,也是【本文首发于唐霜的博客】【关注微信公众号:wwwtangshuangnet】通过比较轻松的router组件实现界面切原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】换。但是native里面,特别是reac著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。t-native开发里面,界面切换需要n本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】ative层面手动实现,因此,一定需要有著作权归作者所有,禁止商业用途转载。【本文受版权保护】人站出来,把界面切换抽象为普适性的一种规著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。则。react-navigation的基本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】本思想,就是一个react-native【作者:唐霜】转载请注明出处:www.tangshuang.net app的所有界面(screen)都是素【原创内容,转载请注明出处】【访问 www.tangshuang.net 获取更多精彩内容】材,通过navigation这个导航器进转载请注明出处:www.tangshuang.net【原创内容,转载请注明出处】行编制,让他们可以自由切换。

【本文受版权保护】【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net【版权所有,侵权必究】

react-navigation的本质,【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。就是建立一个路由网络的索引,并且在建立的本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。时候,就规定好每一个索引节点的表现形式。转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】而界面(screen)只是这些节点下面的【作者:唐霜】原创内容,盗版必究。素材,一个screen可以被引用到不同的【本文首发于唐霜的博客】原创内容,盗版必究。节点下面,再加上节点上的配置信息,就可以本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】产生不同的导航效果。而这个节点的全部信息【本文首发于唐霜的博客】未经授权,禁止复制转载。加起来,就是一个navigation,而【原创不易,请尊重版权】【版权所有】唐霜 www.tangshuang.net一组同一层面的navigation又可以未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net放在一起,再附加一些配置信息,这些配置信【作者:唐霜】【本文首发于唐霜的博客】息可能对所有的navigation都有效【本文首发于唐霜的博客】【本文受版权保护】,那么这些navigation的集合就被未经授权,禁止复制转载。【本文受版权保护】称为一个navigator。naviga【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。tor有不同层面的,也就是说,一个nav【版权所有】唐霜 www.tangshuang.net【作者:唐霜】igator里面,可以把另外一个navi【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】gator作为一个navigationS【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.netetNode(特殊节点)。这样,所有被引转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】用到的screen都被管理在react-【本文受版权保护】【关注微信公众号:wwwtangshuangnet】navigation建立的作用域下,这样未经授权,禁止复制转载。【转载请注明来源】,只要知道节点的名称,就可以立即导航到这【版权所有】唐霜 www.tangshuang.net【本文受版权保护】个界面。

【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】【本文首发于唐霜的博客】原创内容,盗版必究。

四种导航形式【原创内容,转载请注明出处】

本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net【原创不易,请尊重版权】

react-navigation里面有四本文作者:唐霜,转载请注明出处。【本文受版权保护】种导航形式,分别是:stack navi【本文受版权保护】【版权所有】唐霜 www.tangshuang.netgator、tab navigator、未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.netdrawer navigator、ful本文作者:唐霜,转载请注明出处。【未经授权禁止转载】l-screen modal。下面一一简未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。单阐述一下,不作深入的解释。

【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。

react-navigation四种导航【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net形式

【转载请注明来源】【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。

Stack Navigator(栈导航)

【版权所有,侵权必究】原创内容,盗版必究。原创内容,盗版必究。【本文受版权保护】

栈的特点就是“先进后出,后进先出”,就是原创内容,盗版必究。转载请注明出处:www.tangshuang.net有顺序的堆叠态。因此,在stack na【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。vigator里的所有节点都是按照线性排【转载请注明来源】【未经授权禁止转载】列的,于是就有go back这样的操作。【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。除了stack navigator,其他本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】形式都没有go back操作(modal转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net有close操作),因为没有stack。

【未经授权禁止转载】【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】未经授权,禁止复制转载。

stack navigator的另外一个未经授权,禁止复制转载。【本文受版权保护】特点,就是它可以有header bar以【原创不易,请尊重版权】【本文首发于唐霜的博客】及header bar里面的go bac未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。k button。这个特点其他形式也没有【版权所有,侵权必究】【本文首发于唐霜的博客】,特别是tab navigator和dr【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.netawer navigator,这点在开发未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。中要非常注意。modal我们后面会细说。【未经授权禁止转载】【原创不易,请尊重版权】对于一个stack navigator而未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。言,它的header title只会在一原创内容,盗版必究。【作者:唐霜】个navigation创建的时候形成,一【原创内容,转载请注明出处】【版权所有,侵权必究】旦形成,就不会更改,这点算是坑,如果你在【访问 www.tangshuang.net 获取更多精彩内容】【访问 www.tangshuang.net 获取更多精彩内容】一个stack里面,把两个screen设【原创不易,请尊重版权】【本文首发于唐霜的博客】置为同一个组件,又没有设置特定的head【作者:唐霜】未经授权,禁止复制转载。erTitle属性,你会发现,这两个sc原创内容,盗版必究。本文作者:唐霜,转载请注明出处。reen虽然属于不同navigation转载请注明出处:www.tangshuang.net【版权所有,侵权必究】,但是title却是一样的。

【作者:唐霜】未经授权,禁止复制转载。【作者:唐霜】【访问 www.tangshuang.net 获取更多精彩内容】【转载请注明来源】

Tab Navigator(选项卡导航)

【版权所有】唐霜 www.tangshuang.net【转载请注明来源】【本文首发于唐霜的博客】【访问 www.tangshuang.net 获取更多精彩内容】

也就是我们常见的底部菜单那种形式。它几乎【版权所有,侵权必究】转载请注明出处:www.tangshuang.net没有什么特点,唯一的特点(也是缺点)是没【本文首发于唐霜的博客】未经授权,禁止复制转载。有header bar,这点要注意。也正转载请注明出处:www.tangshuang.net原创内容,盗版必究。因如此,一般一个app的顶层导航,不会使【本文首发于唐霜的博客】原创内容,盗版必究。用tab navigator,除非它超级【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。简单,除了这几个tab没有其他页面。也正【作者:唐霜】未经授权,禁止复制转载。因如此,我们一般会在它的里面使用stac本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。k navigator作为子节点,这样才【作者:唐霜】本文版权归作者所有,未经授权不得转载。能既有tab bar,又有header 未经授权,禁止复制转载。【原创内容,转载请注明出处】bar,还能保证每个tab的header【作者:唐霜】转载请注明出处:www.tangshuang.net title不一样。

原创内容,盗版必究。【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net

Drawer Navigator(抽屉导【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net航)

著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。【原创不易,请尊重版权】未经授权,禁止复制转载。

常见的左侧导航,点击一个按钮从左侧飞出来【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net,点一下又收起来关闭。它在很多方面很像t本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】ab navigator,只是不在界面上转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。占用视觉空间而已。

原创内容,盗版必究。未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net

Full-screen Modal(全屏未经授权,禁止复制转载。【未经授权禁止转载】弹出层)

本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net

一定要加上“full-screen”,是本文作者:唐霜,转载请注明出处。原创内容,盗版必究。因为这种modal和那种仅在一个小范围内【原创不易,请尊重版权】【本文首发于唐霜的博客】遮罩展示的modal不同,这种modal【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】的本质是一个navigation,而且这本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。个navigation总是处于一个sta著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.netck的最顶层,你不能再在这个stack的【访问 www.tangshuang.net 获取更多精彩内容】【版权所有,侵权必究】顶上加新层,你必须先关闭modal之后,本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net才可以再在这个stack上加新层。说白了本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】,full-screen modal其实【原创内容,转载请注明出处】【访问 www.tangshuang.net 获取更多精彩内容】是穿着modal外衣的screen。

【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】

在使用时,你需要咋navigator o【本文受版权保护】【未经授权禁止转载】ptions里面传入:

【访问 www.tangshuang.net 获取更多精彩内容】【关注微信公众号:wwwtangshuangnet】【转载请注明来源】【原创不易,请尊重版权】【版权所有,侵权必究】
mode: 'modal',  // 启用modal模式,这样,所有的navigator将会从屏幕下方出现
headerMode: 'none', // 隐藏modal的header,因为如果你使用header,会和stack里面的header同时出现(2个header的高度)

它有如下几个特点:【访问 www.tangshuang.net 获取更多精彩内容】

原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。【原创不易,请尊重版权】
  • 处于某个stack的最顶层原创内容,盗版必究。
  • 【原创不易,请尊重版权】【原创不易,请尊重版权】【原创内容,转载请注明出处】
  • 打开方式(进入效果)不同【版权所有,侵权必究】
  • 【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】【本文受版权保护】【原创内容,转载请注明出处】
  • 当在modal内部导航到stack内的另本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。外层时,它自己会先被关闭
  • 【本文受版权保护】【作者:唐霜】【作者:唐霜】【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。
  • 写代码时,它一定和一个stackNavi未经授权,禁止复制转载。转载请注明出处:www.tangshuang.netgatorSetNode放在一起,置于一【未经授权禁止转载】未经授权,禁止复制转载。个stack navigator中(当然【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】,这个navigator允许有其他的mo转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。dal)
  • 未经授权,禁止复制转载。【本文首发于唐霜的博客】未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。

这里打一个比方,你现在手上有一副扑克牌,【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】你把大小王拿出来,它们就是full-sc未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.netreen modal,你把它们放在其他牌本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net的外面区分开。现在开始游戏:你将除大小王转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】之外的其他所有牌拿在手中,洗牌,牌盒就是【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】一个stack,你一次只能放入一张手牌,【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。放入的牌是随机的,每次放入的必须置于已经【未经授权禁止转载】未经授权,禁止复制转载。放入的牌的最顶端,想要从牌盒内拿回牌,只未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。能拿取最顶上一张;当你使用大小王替代手牌【原创不易,请尊重版权】【作者:唐霜】放入的时候,你不能继续在王牌上放其他牌(【本文受版权保护】著作权归作者所有,禁止商业用途转载。包括另外一张王牌);如果你想继续游戏,就未经授权,禁止复制转载。未经授权,禁止复制转载。必须将已经放入的王牌拿出,弃于王牌堆内,转载请注明出处:www.tangshuang.net【版权所有,侵权必究】使牌盒内恢复普通牌堆形式。

未经授权,禁止复制转载。【转载请注明来源】转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】

导航策略【转载请注明来源】

未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】【原创不易,请尊重版权】

虽然这种抽象挺有意思,也符合理论上的逻辑【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。。但是实际开发中,我们总会遇到这样那样的本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshuangnet】坑,那么怎样才能保证在开发时,不至于乱用【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】而达不到自己想要的效果呢?

【原创内容,转载请注明出处】【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。

我们要遵循以下策略:【本文受版权保护】

本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】
  • 仅在作为screen的组件中使用this【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。.props.navigation,它们转载请注明出处:www.tangshuang.net【转载请注明来源】的子组件里面不能使用,因此,将这些被re著作权归作者所有,禁止商业用途转载。【作者:唐霜】act-navigation直接使用的组【原创不易,请尊重版权】【关注微信公众号:wwwtangshuangnet】件命名为xxx.screen.js
  • 【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。
  • 将app最顶层的导航设定为mode: &未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。#8216;modal’,并【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。且将所有的modal都放在这一层
  • 【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】【原创内容,转载请注明出处】
  • 业务流放在stack navigator
  • 【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】
  • stack navigator作为tab转载请注明出处:www.tangshuang.net【原创不易,请尊重版权】/drawer navigator的子节原创内容,盗版必究。【作者:唐霜】点,通过stack里面的screen组件【版权所有,侵权必究】转载请注明出处:www.tangshuang.netnavigationOptions配置h【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】eader title和是否显示tabb本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。ar
  • 本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】
  • 将tab/drawer navigato未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.netr作为stack navigator的子【关注微信公众号:wwwtangshuangnet】【未经授权禁止转载】节点,和modal放在一个层面
  • 【作者:唐霜】著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。【本文受版权保护】

react-navigation导航策略

未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。【转载请注明来源】【访问 www.tangshuang.net 获取更多精彩内容】

学会导航嵌套是必须的,只有通过嵌套,才能本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】正确处理不同界面的显示问题。但是嵌套又会【本文受版权保护】原创内容,盗版必究。带来导航界面切换不清晰问题,当你在一个比【版权所有】唐霜 www.tangshuang.net【未经授权禁止转载】较深的tab里面,怎么切换到另外一个ta转载请注明出处:www.tangshuang.net原创内容,盗版必究。b的比较深的界面呢?其实你只需要直接使用原创内容,盗版必究。转载请注明出处:www.tangshuang.netnavigate方法即可,因为在reac未经授权,禁止复制转载。【关注微信公众号:wwwtangshuangnet】t-navigation内部维护了一个m【未经授权禁止转载】本文作者:唐霜,转载请注明出处。ap关系,它保证整个navigation未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net网络的每一个节点只有一个名字,即使你再深【原创不易,请尊重版权】原创内容,盗版必究。,我都能瞬间定位你。

未经授权,禁止复制转载。原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】

2018-06-11 8911

为价值买单,打赏一杯咖啡

本文价值89.11RMB
已有1条评论
  1. hiscc 2019-08-22 14:24

    分析的很到位,赞一个。
    一般来说 tabs 都是由多个 stack 来构成,但是位于 tabA 中的 a 页面如果导航到 tabB 中的 b 页面,导航器会先跳出 tabA stack 然后再进入到 tabB stack 到具体的页面,我现在的需求是如何直接从 a 页面导航到 b 页面 就像 stack 那种,然后退出的时候也像 stack 的行为一样,对于这种需求你有遇到过吗?