替代 Navigator 组件
前言:最近在研究 react-native 时,突然发现 Navigator 组件被 react-native 包 抛弃了。现总结了几种替代方法。
方法一:引入 react-native-deprecated-custom-components 组件
npm install react-native-deprecated-custom-components --save
import CustomerComponents, { Navigator } from 'react-native-deprecated-custom-components'; // 引入
方法二:引入 react-navigation 组件
npm install react-navigation --save
官网:https://reactnavigation.org/docs/intro/
demo-1
BasicApp.js
import {
  StackNavigator,
} from 'react-navigation';
const BasicApp = StackNavigator({
  Main: {screen: MainScreen},
  Profile: {screen: ProfileScreen},
});
MainScreen.js
class MainScreen extends React.Component {
  static navigationOptions = {
    title: 'Welcome',
  };
  render() {
    const { navigate } = this.props.navigation;
    return (
      <Button
        title="Go to Jane's profile"
        onPress={() =>
          navigate('Profile', { name: 'Jane' })
        }
      />
    );
  }
}
ProfileScreen.js
class ProfileScreen extends React.Component {
  static navigationOptions = ({navigation}) => ({
    title: navigation.state.params.name,
  });
  render() {
    const { goBack } = this.props.navigation;
    return (
      <Button
        title="Go back"
        onPress={() => goBack()}
      />
    );
  }
}
效果图:
android

ios

demo-2:
BasicApp.js
import {
  TabNavigator,
} from 'react-navigation';
const BasicApp = TabNavigator({
  Main: {screen: MainScreen},
  Setup: {screen: SetupScreen},
});
MainScreen.js
class MainScreen extends React.Component {
  static navigationOptions = {
    tabBarLabel: 'Home',
  };
  render() {
    const { navigate } = this.props.navigation;
    return (
      <Button
        title="Go to Setup Tab"
        onPress={() => navigate('Setup')}
      />
    );
  }
}
SetupScreen.js
class SetupScreen extends React.Component {
  static navigationOptions = {
    tabBarLabel: 'Setup',
  };
  render() {
    const { goBack } = this.props.navigation;
    return (
      <Button
        title="Go back to home tab"
        onPress={() => goBack()}
      />
    );
  }
}
效果:
android

ios

方法三:自定义 Navigator 组件
首先导入组件
var MLNavigator = require('../Lib/MLNavigator');
然后使用
<MLNavigator
leftIconName = 'nav_btn_back'
title = '我的导航'
rightIconName = 'nav_btn_back'
rightTitle = '右边标题'
callBackLeftClick = {()=> this.popToHome()}
callBackRightClick = {()=> this.popToHome()}
/>
定义的一些属性:
leftIconName: '', // 左边图片
leftTitle: '', // 左边标题
title: '', // 标题
rightIconName: '', // 右边图片
rightTitle: '', // 右边标题
callBackLeftClick: null, // 左边回调
callBackRightClick: null, // 右边回调
leftTitleFontSize: 14, // 左边标题的字体大小
titleFontSize: 16, // 标题的字体大小
rightTitleFontSize: 14, // 右边标题的字体大小
leftTitleColor: '#666666', // 左边标题的字体颜色
titleColor: 'black', // 标题的字体颜色
rightTitleColor: '#666666', // 右边标题的字体颜色
组件封装:
import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    Image,
    Platform,
    TouchableOpacity
} from 'react-native';
var Dimensions = require('Dimensions');
var width = Dimensions.get('window').width;
var Height = Dimensions.get('window').height;
var MLNavigator = React.createClass ({
    getDefaultProps() {
        return{
            leftIconName: '',    // 左边图片
            leftTitle: '',       // 左边标题
            title: '',           // 标题
            rightIconName: '',   // 右边图片
            rightTitle: '',      // 右边标题
            callBackLeftClick: null,   // 左边回调
            callBackRightClick: null,  // 右边回调
            leftTitleFontSize: 14,     // 左边标题的字体大小
            titleFontSize: 16,         // 标题的字体大小
            rightTitleFontSize: 14,    // 右边标题的字体大小
            leftTitleColor: '#666666',     // 左边标题的字体颜色
            titleColor: 'black',         // 标题的字体颜色
            rightTitleColor: '#666666',    // 右边标题的字体颜色
        }
    },
    render() {
        return (
            <View style={styles.NavBarStytle}>
                {/* 左边 */}
                {this.navLeftView()}
                <Text style={{color: this.props.titleColor, fontSize: this.props.titleFontSize, fontWeight: 'bold', bottom:-10}}>{this.props.title}</Text>
                {/* 右边 */}
                {this.navRightView()}
            </View>
        );
    },
    navLeftView() {
        if(this.props.leftIconName){
            return(
                <TouchableOpacity activeOpacity={0.5} style={styles.leftViewStytle} onPress={()=> {this.props.callBackLeftClick()}}>
                    <Image source={{uri: this.props.leftIconName}} style={styles.NavLeftImageStyle} />
                </TouchableOpacity>
            )
        }else {
            return(
                <TouchableOpacity activeOpacity={0.5} style={styles.leftViewStytle} onPress={()=> {this.props.callBackLeftClick()}}>
                    <Text style={{color: this.props.leftTitleColor, fontSize: this.props.leftTitleFontSize, bottom:-2}}>{this.props.rightTitle}</Text>
                </TouchableOpacity>
            )
        }
    },
    navRightView() {
        if(this.props.rightIconName){
            return(
                <TouchableOpacity activeOpacity={0.5} style={styles.rightViewStytle} onPress={()=> {this.props.callBackRightClick()}}>
                    <Image source={{uri: this.props.rightIconName}} style={styles.NavRightImageStyle} />
                </TouchableOpacity>
        )
        }else {
            return(
                <TouchableOpacity activeOpacity={0.5} style={styles.rightViewStytle} onPress={()=> {this.props.callBackRightClick()}}>
                    <Text style={{color: this.props.rightTitleColor, fontSize: this.props.rightTitleFontSize, bottom:-2}}>{this.props.rightTitle}</Text>
                </TouchableOpacity>
             )
        }
    },
})
const styles = StyleSheet.create({
    NavBarStytle: {
        width: width,
        height: Platform.OS == 'ios' ? 64 : 44,
        backgroundColor: '#F2F2F2',
        flexDirection: 'row',
        alignItems: 'center',
        justifyContent: 'center'
    },
    leftViewStytle: {
        position: 'absolute',
        left: 15,
        bottom: 15
    },
    NavLeftImageStyle: {
        width: Platform.OS == 'ios' ? 15 : 15,
        height: Platform.OS == 'ios' ? 15 : 15,
    },
    rightViewStytle: {
        position: 'absolute',
        right: 15,
        bottom: 15
    },
    NavRightImageStyle: {
        width: Platform.OS == 'ios' ? 15 : 15,
        height: Platform.OS == 'ios' ? 15 : 15,
    },
});
module.exports = MLNavigator;
.
替代 Navigator 组件的更多相关文章
- 微信小程序把玩(二十六)navigator组件
		
原文:微信小程序把玩(二十六)navigator组件 navigator跳转分为两个状态一种是关闭当前页面一种是不关闭当前页面.用redirect属性指定. 主要属性: wxml <naviga ...
 - ReactNative: 使用导航栏组件-NavigatorIOS组件和Navigator组件
		
一.简言 在软件开发中,不论是Web还是App,它们的应用程序都是由很多的功能视图组成的.对于这些组合的视图,如何实现页面间平滑地过渡,应用都有统一的一套跳转机制,这个功能就是路由或者叫导航.应用程序 ...
 - Flutter中的普通路由与命名路由(Navigator组件)
		
Flutter 中的路由通俗的讲就是页面跳转.在 Flutter 中通过 Navigator 组件管理路由导航.并提供了管理堆栈的方法.如:Navigator.push 和 Navigator.pop ...
 - navigator组件(相当于a标签)
		
navigator组件:页面链接: navigator组件属性: target:类型 字符串 在哪个目标上发生跳转,默认当前小程序 属性值:self 当前小程序 miniProgram 其他小程序 u ...
 - React Native常用组件之TabBarIOS、TabBarIOS.Item组件、Navigator组件、NavigatorIOS组件、React Navigation第三方
		
以下内容为老版本React Native,faceBook已经有了新的导航组件,请移步其他博客参考>>[我是传送门] 参考资料:React Navigation react-native ...
 - react native的Navigator组件示例
		
import React, {Component} from 'react';import {ScrollView, StyleSheet, Text, View, PixelRatio} from ...
 - Unity TextMeshPro替代Text组件创建简体中文字体纹理集
		
Unity原生的Text组件有一个毛病,只要文本放大字体放大就会有毛边或锯齿,一个更好的解决方案是用TextMeshPro替代ugui中的Text组件. TMPro采用SDF文字渲染技术,可以使文字放 ...
 - React Native使用Navigator组件进行页面导航报this.props....is not a function错误
		
在push的时候定义回调函数: this.props.navigator.push({ component: nextVC, title: titleName, passProps: { //回调 g ...
 - React Native  Navigator组件回调
		
在push的时候定义回调函数: this.props.navigator.push({ component: nextVC, title: titleName, passProps: { //回调 g ...
 
随机推荐
- 分享一下我写的.net 2.0的orm类,实现mvc。可以用于webform等环境中,这是orm的原理部分。
			
using System;using System.Collections.Generic;using System.Configuration;using System.Data;using Sys ...
 - DotNETCore 学习笔记 Startup、中间件、静态文件
			
Application Startup Startup Constructor - IHostingEnvironment - ILoggerFactory ConfigureServices - I ...
 - zepto.js 自定义打包集成其他模块构建流程
			
1.首先在自己的电脑上要安装Node.js和npm包管理工具: 2.从github上下载zepto.js的源文件包到本地磁盘(例如:E:\Learning\JS): 地址:https://github ...
 - Balanced Photo(USACO)
			
题目大意: 我们有一个数列,数列中有n个数,对于一个数ai,在它左边的比他大的数的个数为li,右边比他大的数的个数为ri,若li,ri中的较大者比较小者的两倍还大,那么他就是一个不平衡数,求不平衡数的 ...
 - django中的类视图
			
# 原创,转载请留言联系 当我们在开发一个注册模块时.浏览器会通过get请求让注册表单弹出来,然后用户输完注册信息后,通过post请求向服务端提交信息.这时候我们后端有两个视图函数,一个处理get请求 ...
 - asp.net+uploadify实现图片上传图片
			
前段代码如下 $("#file_upload").uploadify({ 'auto': true, 'swf': '/template/js/cutImg/uploadify/u ...
 - Codeforces 897 B.Chtholly's request-思维题(处理前一半)
			
B. Chtholly's request time limit per test 2 seconds memory limit per test 256 megabytes input st ...
 - CodeForces 450B Jzzhu and Sequences 【矩阵快速幂】
			
Jzzhu has invented a kind of sequences, they meet the following property: You are given x and y, ple ...
 - mac-command-line-doing
			
创建文件夹 mkdir myDirectory 新建文件 touch a.html 编辑文件 vim a.html 删除文件 rm a.html 删除整个文件夹 rm -rf myDirectory ...
 - [Beijing2010组队]次小生成树Tree
			
小C最近学了很多最小生成树的算法,Prim算法.Kurskal算法.消圈算法等等.正当小C洋洋得意之时,小P又来泼小C冷水了.小P说,让小C求出一个无向图的次小生成树,而且这个次小生成树还得是严格次小 ...