美文网首页
React Native学习之导航器Navigator的使用(三

React Native学习之导航器Navigator的使用(三

作者: dhhuanghui | 来源:发表于2018-04-18 11:25 被阅读44次

1、导航器用于页面之间的切换,根据文档介绍,从0.44版本开始,Navigator被从react native的核心组件库中剥离到了一个名为react-native-deprecated-custom-components的单独模块中。如果你需要继续使用Navigator,则需要先yarn add react-native-deprecated-custom-components安装,然后从这个模块中import,即import { Navigator } from 'react-native-deprecated-custom-components'.
2、具体使用方法可以看http://bbs.reactnative.cn/topic/20/%E6%96%B0%E6%89%8B%E7%90%86%E8%A7%A3navigator%E7%9A%84%E6%95%99%E7%A8%8B/2,里面包含了页面的跳转以及传参;
3、补充一点,针对android app开发中经常会在第一个页面双击两下退出应用,这个可以放程序的入口处,避免每个页面都写;

import React, {Component} from 'react';
import {
    Platform,
    BackAndroid,
    ToastAndroid,
} from 'react-native';
import {Navigator} from 'react-native-deprecated-custom-components'
import Splash from './component/SplashComponent'
import hookNavigator from './utils/hookNavigator';

export default class App extends Component {

    render() {
        return (
            <Navigator
                ref={this.onNavigatorRef}
                initialRoute={{id: 'splash', component: Splash}}
                configureScene={this.configureScene}
                renderScene={this.renderScene}
            />
        );
    }
  //这里需要把navigator的引用设置为全局变量,后面需要使用到该引用
    onNavigatorRef = (ref) => {
        this.navigator = ref;
        if (ref) {
            hookNavigator(ref);
        }
    };
    configureScene(route) {
        // if (route.sceneConfig) { // 有设置场景
        //     return route.sceneConfig;
        // }
        return Navigator.SceneConfigs.PushFromRight; // 默认,右侧弹出
    }

    renderScene(route, navigator) {
        return <route.component {...route.passProps} nav={navigator}/>;
    }

    componentDidMount() {
        if (Platform.OS === 'android') {
            BackAndroid.addEventListener('hardwareBackPress', this.onBackAndroid);
        }
    }

    componentWillUnmount() {
        if (Platform.OS === 'android') {
            BackAndroid.removeEventListener('hardwareBackPress', this.onBackAndroid);
        }
    }

    onBackAndroid = () => {
        let nav = this.navigator;
        const routers = nav.getCurrentRoutes();
        if (routers.length > 1) {
            nav.pop();
            return true;
        }
        let now = new Date().getTime();
        if (now - this.lastClickTime < 2500) {
            //2.5秒内点击后退键两次推出应用程序
            return false;//控制权交给原生
        }
        this.lastClickTime = now;
        ToastAndroid.show('再按一次退出应用', ToastAndroid.SHORT);
        return true;
    };
}

相关文章

网友评论

      本文标题:React Native学习之导航器Navigator的使用(三

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