我正在尝试将参数传递到新屏幕,并像提到的here一样实现它。
我有以下TouchableOpacity
按钮。
<TouchableOpacity
onPress={() => {
this.props.navigation.navigate('SomeScreen', {
title: 'Title',
subTitle: 'Subtitle',
});
}}
>
在另一页上(我们称其为Somescreen),我有以下内容:
render() {
const { navigation } = this.props;
const title = navigation.getParam('title');
}
但是上面的title
未定义:
{params: undefined, routeName: "Somescreen", key: "id-xx"}
我的rootStack:
const RootStack = createStackNavigator({
SomescreenA: { screen: SomescreenA },
SomescreenB: { screen: SomescreenB },
}, { headerMode: 'none' });
为什么在新屏幕中未定义我的参数?
答案 0 :(得分:13)
如果您遇到目标屏幕获得 undefined
参数的情况,那么您可能有一个嵌套的导航堆栈。
这里你必须以这种方式将参数传递给导航方法:
navigation.navigate('Root', {
screen: 'Settings',
params: { user: 'jane' },
});
有关更多信息,请阅读官方文档中的此页面:
https://reactnavigation.org/docs/nesting-navigators/#navigating-to-a-screen-in-a-nested-navigator
答案 1 :(得分:1)
可接受的解决方案对我不起作用,因此显然,如果您使用children
来渲染组件(在屏幕选项中)并通过route
作为道具,它将起作用
答案 2 :(得分:0)
很不幸,我遇到过navigate(route, params, ...)
不会像您一样通过params
对象的情况。
作为一种解决方法,我使用了另一个变体-navigate({routeName, params, action, key})
,您可以找到here。它总是有效。
答案 3 :(得分:0)
在我的特定情况下,我调用了嵌套导航器,因此我必须管理如何将这些参数发送到它们的特定屏幕,所以我这样做了:
以这种方式发送参数...常规方式:
navigation.navigate(
'OrderNavigator',
{itemSelected},
);
然后,从导航器堆栈中,我这样做了:
const OrderNavigator = ({route: {params}}) => {
return (
<Stack.Navigator initialRouteName="Order">
<Stack.Screen name="Order" component={Order} options={{headerShown: false}} initialParams={params} />
</Stack.Navigator>
);
};
就是这样。然后从屏幕上我得到它们是这样的:
const Order = ({route}) => {
const {itemSelected} = route.params;
const {first_name, last_name} = itemSelected;
return (...)
}
答案 4 :(得分:-1)
尝试一下,
this.props.route.params?.someParam ?? 'defaultValue';