React Native之导航组件NavigatorIOS和Navigator

React Native之导航组件NavigatorIOS和Navigator

ReactNaive相关文章

1. React Native 中文网

2. GitHub相关代码地址

3. ReactNaive之CSS和Flex布局

4. ReactNative之基本组件

5. React Naive之ScrollView和ListView

6. React Native之导航组件NavigatorIOS和Navigator

7. ReactNative之TabBariOS和TabNavigator


注: 本文主要总结的是ReactNative的一些简单语法, 大部分内容总结自袁大神的文章

Navigator.png

一. NavigatorIOS

  • NavigatorIOS是一个包装UINavigationController,能够实现一个导航堆栈, 且只能在iOS上使用的组件
  • 它的工作原理与使用本地应用程序UINavigationController的效果完全相同,从UIKIt提供相同的动画和行为

1. 常用属性

//样式, 必须设置{flex:1}, 否则看不到子控件
style={{flex:1}}

//导航条的背景颜色
barTintColor='yellow'

//为true , 隐藏导航栏
navigationBarHidden={false}

//是否隐藏阴影,true/false。
shadowHidden={false}

//导航栏上按钮的颜色设置
tintColor='black'

//导航栏上标题的颜色设置
titleTextColor='blue'

//导航栏是否是半透明的,true/false。
translucent={true}

2. NavigatorIOS的使用

  • 必须初始化路由: initialRoute{}
  • 注意:component,需要传入组件,自定义组件
//用于初始化路由。其参数对象中的各个属性如下:
initialRoute:
 {
  component: function, //加载的视图组件
  title: string, //当前视图的标题
  passPros: object, //传递的数据
  backButtonIcon: Image.propTypes.source, // 后退按钮图标
  backButtonTitle: string, //后退按钮标题
  leftButtonIcon: Image.propTypes.soruce, // 左侧按钮图标
  leftButtonTitle: string, //左侧按钮标题
  onLeftButtonPress: function, //左侧按钮点击事件
  rightButtonIcon: Image.propTypes.soruce, // 右侧按钮图标
  rightButtonTitle: string, //右侧按钮标题
  onRightButtonPress: function, //右侧按钮点击事件
}

  • 使用示例
<NavigatorIOS initialRoute={
        {
        //JunNavigatorView: 为自定义的组件
            component:JunNavigatorView,
            title: '首页',
            leftButtonTitle:'左按钮',
            rightButtonTitle:'跳转'
        }
    }
/>

3. 页面间的跳转

  • 获取Navigator,只有它才能跳转
  • 只要是导航控制器下的组件,都可以通过props获取
  • this.props.navigator
  • 界面跳转方法
pust(route)://加载一个新的页面(视图或者路由)并且路由到该页面。
pop()://返回到上一个页面。
popN(n)://一次性返回N个页面。当 N=1 时,相当于 pop() 方法的效果。
replace(route)://替换当前的路由。
replacePrevious(route)://替换前一个页面的视图并且回退过去。
resetTo(route)://取代最顶层的路由并且回退过去。
popToTop()://回到最上层视图。

  • 使用示例
    <Text onPress={()=>{
        this.props.navigator.push({
            component:JunTwoView,
            title:'第二页面'
        })

    }}
    >点击跳转到第二个页面</Text>

二. Navigator

  • Navigator很好解决了NavigatorIOS不能跨平台和自定义的问题
  • RN开发中通常使用Navigator
  • Navigator作用:只提供跳转功能,支持iOS,安卓
  • 导航条需要自定义,需要导航条的界面,自己添加
    只要一个控件,包装成Navigator就能获取跳转功能

1. Navigator导入问题

  • 在0,43版本之前(包括0.43), Navigatorreact-native库中
  • 从0.44版本开始Navigator就被移入了react-native-deprecated-custom-components库中
  • 使用前,先进入当前项目文件,安装Navigator所在的库
//终端输入
yarn add react-native-deprecated-custom-components

//下面方法可能已经失效(亲测失败)
npm install react-native-deprecated-custom-components --save
  • 下载完成后,导入
import {Navigator} from 'react-native-deprecated-custom-components'

2. Navigator的使用

2-1. initialRoute: 初始化路由

  • 定义启动时加载的路由
  • 路由是导航栏用来识别渲染场景的一个对象
<Navigator initialRoute={{component: JunOneView}}/>

2-2. 配置场景动画和手势

  • 可选的函数, 设置跳转方向
  • 会带有两个参数调用,一个是当前的路由,一个是当前的路由栈
  • 返回一个场景配置对象
_configureScene(route, routeStack) {
    return Navigator.SceneConfigs.PushFromLeft;
}
  • 其他跳转方向参数
Navigator.SceneConfigs.PushFromRight (默认)
Navigator.SceneConfigs.FloatFromRight
Navigator.SceneConfigs.FloatFromLeft
Navigator.SceneConfigs.FloatFromBottom
Navigator.SceneConfigs.FloatFromBottomAndroid
Navigator.SceneConfigs.FadeAndroid
Navigator.SceneConfigs.HorizontalSwipeJump
Navigator.SceneConfigs.HorizontalSwipeJumpFromRight
Navigator.SceneConfigs.VerticalUpSwipeJump
Navigator.SceneConfigs.VerticalDownSwipeJump

2-3. 渲染指定路由的场景

  • 必要参数, 调用的参数是路由和导航器
_renderScene(route, navigator) {
        // ...扩展符, 作用:如果是对象,就获取对象中所有值,如果是数组,就获取数组中所有值
    return (<route.component navigator={navigator} {... route.props}/>)
}

2-4. 设置导航尺寸

style={{flex:1}}

3. 其他属性或方法

onDidFocus function 
//每当导航切换完成或初始化之后,调用此回调,参数为新场景的路由。

onWillFocus function 
//会在导航切换之前调用,参数为目标路由。

三. 延展符

  • 文中用到了一个操作符: ...即为延展符
  • 延展符的作用
    • 遍历数组
    • 遍历对象的属性,一个一个传值给下一个控件
var arr1 = [1, 2, 3, 4, 5]
var arr2 = [0]
        
arr2.push(...arr1)
console.log(arr2)
//输出结果: [0, 1, 2, 3, 4, 5]
  • 作用等同于JavaScript数组中的concat方法
  • 区别在于concat只能作用于数组
var arr1 = [1, 2, 3, 4, 5]
var arr2 = [0]

// arr2.push(...arr1)
arr2 = arr2.concat(arr1)
console.log(arr2)
//输出结果: [0, 1, 2, 3, 4, 5]

关于JavaScript的数组语法, 请查看我的另一篇文章JavaScript基本语法01

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容