美文网首页React Native开发
React-Native 导航跳转实现与坑

React-Native 导航跳转实现与坑

作者: S__J | 来源:发表于2018-02-08 13:23 被阅读1614次

    由于最近要用RN写app,就赶紧看看,可是没有那么多时间,就一边看一边写了,所以学的没有那么细很多坑, 先来实现,最后来看看坑吧

    运行环境:RN版本0.48以上
    使用最新官网推荐的导航器:React Navigation 实现
    首先安装:
    //进入你项目的根目录下执行
    npm install --save react-navigation 或者yarn add react-navigation
    新建文件夹a.js,b.js,最终效果是a跳转到b,b里面可以back回来。

    react-navigation中我们要用的就是StackNavigator,他可以实现顶部导航栏跳转的效果
    首先比较重要的一个概念就是,参与跳转的页面,要全部都在个组件里面注册一下,然后在index.js入口里面注册,因为index.js里面也是直接引入的App.js,所以我们也可以在这里注册到应用程序中(其实就是引入渲染下),默认会渲染第一个注册的页面。

    首先注册我们所有参与导航跳转的页面,在StackNavigator注册。随便建一个js文件,如application.js,如下:
    import {
    StackNavigator,
    } from 'react-navigation';

    import React from 'react';

    import a from './a';
    import b from './b';

    /*

    • 初始化StackNavigator
      */
      export default App = StackNavigator({
      //默认加载第一个页面,用来注册需要跳转的页面
      a: {
      screen: a,
      },
      b:{
      screen: b,
      }
      });

    然后在App.js里面注册到我们的应用里面(因为index.js入口文件直接引入了它并渲染了所以在这里也可以),如下:

    import React, { Component } from 'react';
    import Myapp from './src/application';

    export default class App extends Component {
    render(){
    return (
    <Myapp></Myapp>
    )
    }

    }

    然后a.js页面,如下:
    import React, { Component } from 'react';
    import { Text } from 'react-native';

    export default class HelloWorldApp extends Component {
    //设置顶部导航栏的内容
    static navigationOptions = ({navigation, screenProps}) => ({
    //左侧标题
    headerTitle: '我是主页面',
    //设置跳转页面左侧返回箭头后面的文字,默认是上一个页面的标题
    headerBackTitle: null,
    //顶部标题栏的样式
    headerStyle: styles.headerStyle,
    //顶部标题栏文字的样式
    headerTitleStyle: styles.headerTitleStyle,
    });
    render() {
    return (
    <Text style={styles.button} onPress={() => {
    this.props.navigation.navigate('b', {key: '传递的标题'})}}>跳转到b</Text>
    <Text>Hello world!</Text>
    );
    }
    }
    点击文本后跳转到b页面,然后还有传值。

    然后b.js页面,如下:
    import React, { Component } from 'react';
    import { Text } from 'react-native';

    export default class HelloWorldApp extends Component {
    render() {
    return (
    <Text>Hello b!</Text>
    );
    }
    }
    然后没啦,b页面会自动有一个返回的按钮。
    然后就实现了页面跳转的功能,然后坑来了,<Myapp></Myapp>,注册到应用时,引入的初始化注册页面的application.js文件,命名不要全小写或大写,一定要首字母大写,也就是不要这样<myapp></myapp>我也不知道为什么,没去查,要不然会大红屏报错。

    //页面跳转 第一个参数则是我们在application.js中注册的页面
    //第二个参数则是传递的参数,也可以不传。
    this.props.navigation.navigate('Detail', {key: '传递的标题'}

    //跳转页面的第二种写法
    const {navigate} = this.props.navigation;
    navigate('Detail', {key: '传递的参数'});

    //没有参数的情况
    const {navigate} = this.props.navigation;
    navigate('Detail');

    获取a页面传递过来的值
    navigation.state.params.key //key就是你自己设置的键

    导航栏的设置:
    headerTitle: '标题' ===> 导航栏的标题
    header: null ===> 隐藏导航栏
    headerTintColor: 'white' ===> 返回按钮的颜色
    headerTitleStyle: {} ===> 导航栏文字的样式
    headerStyle: {} ===> 导航栏的样式
    headerRight: (< View/>) ===> 设置顶部导航栏友边的视图 和 解决当有返回箭头时,文字不居中
    headerLeft: (< View/>) ===> 设置导航栏左边的视图 和 去除返回箭头
    headerBackTitle: null ===> 设置跳转页面左侧返回箭头后面的文字,默认是上一个页面的标题
    gestureResponseDistance: {horizontal: 300} ===> //设置滑动返回的距离

    相关文章

      网友评论

        本文标题:React-Native 导航跳转实现与坑

        本文链接:https://www.haomeiwen.com/subject/pkhttftx.html