react-native - 无法通过导航发送参数导航
问题描述
我想通过路由器将参数名称从登录屏幕发送到主屏幕,但未定义数据对象
TypeError:未定义不是对象(评估'navigation.state.params.name'
登录屏幕
<TouchableOpacity
style={styles.buttonContainer}
onPress={() => this.props.navigation.navigate('Home', { name: 'Erry' })}>
<Text style={styles.buttonText}>MASUK</Text>
</TouchableOpacity>
我的路由器
export const LoginStack = SwitchNavigator({
Login: {
screen: Login,
},
Home: {
screen: HomeStack
}
}, {
headerMode: 'none',
navigationOptions: {
headerVisible: false,
}
});
export const HomeStack = StackNavigator({
Home: {
screen: Home
}
});
主屏幕
static navigationOptions = ({navigation}) => ({
title: `${navigation.state.params.name}`,
headerStyle : {
backgroundColor: '#f39c12',
},
headerTitleStyle :{
color: '#353b48',
},
});
任何想法 ?
解决方案
SwitchNavigator 的目的是一次只显示一个屏幕。默认情况下,它不处理返回操作,并且在您切换离开时将路由重置为默认状态。
你最好不要用SwitchNavigator
,你可以看看正确的例子。
你最好判断是否params
为空:
const params = navigation.state.params || {};
const title = params.name || 'default title';
推荐阅读
- amazon-web-services - 在 AWS ec2 实例中自动安装 exe
- c - 读取字节流文件
- python-3.x - 为熊猫中的数据框列换行
- odoo - 如何在同一台机器上运行 Odoo 10 和 11.0?
- preg-replace - 我不明白 preg_replace_callback 是如何工作的,如何从 preg_replace 更新
- c++ - 将 C 程序转换为具有大量 char* 和 unsigned char 转换错误的 C++
- google-analytics - 如何在 AMP 页面中跟踪 youtube 视频
- android - 如何从地图上获取街道地址、邮政编码、国家、州?
- rundeck - 如何使用 ruby restclient 在 yaml 中导入 rundeck 作业
- java - 最佳实践 - 组导入