在TabNavigator中使用Navigation报错undefined is not an object (this.props.navigation.navigate)
2017-07-20 16:11
211 查看
在学习react-native时,出现一个愣是想不明白的错误,在TabNavigator底部导航菜单的子页面中做跳转,总会弹出错误界面,错误大概:
undefined
is not an object (this.props.navigation.navigate),
即是这个属性是不存在的。想想,可能需要在导航菜单页里传递一个名为navigation的参数才行吧,于是在首页的底部菜单每个子页都加上这个属性,结果,还真可以了,虽然还不是很懂Navigation路由的深层原理,但是问题终究还是解决了,记录一下,代码如下:
路由配置代码:
主页代码:
MySelf页面代码:
undefined
is not an object (this.props.navigation.navigate),
即是这个属性是不存在的。想想,可能需要在导航菜单页里传递一个名为navigation的参数才行吧,于是在首页的底部菜单每个子页都加上这个属性,结果,还真可以了,虽然还不是很懂Navigation路由的深层原理,但是问题终究还是解决了,记录一下,代码如下:
路由配置代码:
/** * Created by Administrator on 2017/7/20. */ import {StackNavigator} from 'react-navigation'; import Main from './js/main'; import MySelf from './js/myself'; import List from './js/list'; const NaviApp = StackNavigator({ Main: {screen: Main}, MySelf: {screen: MySelf}, List: {screen: List} },{ initialRouteName: 'Main' }); export default NaviApp;
主页代码:
/** * Created by Administrator on 2017/7/19. */ import React,{Component} from 'react'; import { View, Image, Text, StyleSheet, Dimensions } from 'react-native'; import TabNavigator from 'react-native-tab-navigator'; import MySelf from './myself'; var navigation = null; export default class Main extends Component { constructor(props){ super(props); this.state = { selectedTab: '首页', }; navigation = this.props.navigation; } render(){ return( <View style={styles.footer}> <TabNavigator> <TabNavigator.Item selected={this.state.selectedTab === '首页'} title="首页" titleStyle={styles.tabText} selectedTitleStyle={styles.selectedTabText} renderIcon={() => <Image style={styles.icon} source={require("../imgs/index.png")} />} renderSelectedIcon={() => <Image style={styles.icon} source={require("../imgs/indexselected.png")} />} onPress={() => this.setState({ selectedTab: '首页' })} > <MySelf navigation={navigation}/> </TabNavigator.Item> <TabNavigator.Item selected={this.state.selectedTab === '新闻'} title="新闻" titleStyle={styles.tabText} selectedTitleStyle={styles.selectedTabText} renderIcon={() => <Image style={styles.icon} source={require("../imgs/news.png")} />} renderSelectedIcon={() => <Image style={styles.icon} source={require("../imgs/newsselected.png")} />} onPress={() => this.setState({ selectedTab: '新闻' })} > <MySelf navigation={navigation}/> </TabNavigator.Item> <TabNavigator.Item selected={this.state.selectedTab === '圈子'} title="圈子" titleStyle={styles.tabText} selectedTitleStyle={styles.selectedTabText} renderIcon={() => <Image style={styles.icon} source={require("../imgs/circle.png")} />} renderSelectedIcon={() => <Image style={styles.icon} source={require("../imgs/circleselected.png")} />} onPress={() => this.setState({ selectedTab: '圈子' })} > <MySelf navigation={navigation}/> </TabNavigator.Item> <TabNavigator.Item selected={this.state.selectedTab === '我的'} title="我的" titleStyle={styles.tabText} selectedTitleStyle={styles.selectedTabText} renderIcon={() => <Image style={styles.icon} source={require("../imgs/my.png")} />} renderSelectedIcon={() => <Image style={styles.icon} source={require("../imgs/myselected.png")} />} onPress={() => this.setState({ selectedTab: '我的' })} > <MySelf navigation={navigation}/> </TabNavigator.Item> </TabNavigator> </View> ); } } const styles = StyleSheet.create({ footer: { flex: 1, justifyContent: 'center', backgroundColor: '#F00', }, tabText: { color: '#000', textAlign: 'center', fontSize: 14, }, selectedTabText: { color: '#F00', textAlign: 'center', fontSize: 14, }, icon: { width: 20, height: 20 } });
MySelf页面代码:
/** * Created by Administrator on 2017/7/19. */ import React, {Component} from 'react'; import { View, Text, TouchableOpacity } from 'react-native'; var navigation = null; export default class MySelf extends Component { constructor(props){ super(props); navigation = this.props.navigation; } render(){ return( <TouchableOpacity onPress={()=>navigation.navigate('List')}> <View style={{backgroundColor:'#FFF'}}> <Text>I am MySelf Page!!</Text> </View> </TouchableOpacity> ); } }
相关文章推荐
- 解决:react native使用TabNavigator报错 PropTypes has been moved to a separate package...
- Flex中解决使用TabNavigator控件不能显示Alert.Show()窗体的方法
- 解决React Native中使用TabNavigator时、对tab只设置文字时文字没有垂直居中
- Flex4 中使用ModuleLoader为子容器 动态加入到TabNavigator导航器容器中的例子
- TabNavigator中页面切换使用Move效果
- 单链表的使用——计算多项式加法
- 线程使用经验
- 关于导入GPUimage到工程以及简单使用
- 文件下载之使用AsyncTask并在进度对话框中显示下载进度
- 使用android studio迁移项目到不同的svn仓库
- UIAlertController的使用(ios9.0后代替UIAlertView与UIActionSheet)
- 在 JS 中使用 fetch 更加高效地进行网络请求
- ESP8266使用详解
- NSFetchedResultsController 在CoreData中的使用 配合UITableView
- windows下如何使用adrci
- C/C++——求下面数据类型的最大值和最小值: char, short, int, long, float, double, long double和numeric_limits使用
- C#使用file无法修改netware操作系统下的文件创建日期
- DES加密算法,简单使用!
- EasyMock使用方法和原理介绍
- windows下mongodb安装与使用整理