Kev*_*ore 4 react-native react-navigation
我正在尝试将 params 传递到一个新屏幕,并像这里提到的那样实现它。
我有以下TouchableOpacity按钮。
<TouchableOpacity
onPress={() => {
this.props.navigation.navigate('SomeScreen', {
title: 'Title',
subTitle: 'Subtitle',
});
}}
>
Run Code Online (Sandbox Code Playgroud)
在另一个页面上(我们称之为 Somescreen),我有以下内容:
render() {
const { navigation } = this.props;
const title = navigation.getParam('title');
}
Run Code Online (Sandbox Code Playgroud)
但title以上是未定义的:
{ params: undefined, routeName: "Somescreen", key: "id-xx" }
Run Code Online (Sandbox Code Playgroud)
我的根堆栈:
const RootStack = createStackNavigator({
SomescreenA: { screen: SomescreenA },
SomescreenB: { screen: SomescreenB },
}, { headerMode: 'none' });
Run Code Online (Sandbox Code Playgroud)
为什么我的参数在新屏幕中未定义?
Ali*_*esh 15
如果您遇到目标屏幕获取undefined参数的情况,可能您有一个嵌套的导航堆栈。
在这里,您必须以这种方式将参数传递给导航方法:
navigation.navigate('Root', {
screen: 'Settings',
params: { user: 'jane' },
});
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请阅读官方文档中的此页面:
https://reactnavigation.org/docs/nesting-navigators/#navigating-to-a-screen-in-a-nested-navigator
在我的具体情况下,我正在调用嵌套导航器,因此我必须管理如何将这些参数发送到其特定屏幕,所以我这样做了:
以这种方式发送参数...常规方式:
navigation.navigate(
'OrderNavigator',
{itemSelected},
);
Run Code Online (Sandbox Code Playgroud)
然后,从导航器堆栈中我这样做了:
const OrderNavigator = ({route: {params}}) => {
return (
<Stack.Navigator initialRouteName="Order">
<Stack.Screen name="Order" component={Order} options={{headerShown: false}} initialParams={params} />
</Stack.Navigator>
);
Run Code Online (Sandbox Code Playgroud)
};
就是这样。然后从屏幕上我得到它们是这样的:
const Order = ({route}) => {
const {itemSelected} = route.params;
const {first_name, last_name} = itemSelected;
return (...)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18336 次 |
| 最近记录: |