反应导航未定义的参数

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


ger*_*gro 9

在我的具体情况下,我正在调用嵌套导航器,因此我必须管理如何将这些参数发送到其特定屏幕,所以我这样做了:

以这种方式发送参数...常规方式:

    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)


Kra*_*log 3

不幸的是,我遇到过navigate(route, params, ...)无法传递params对象的情况,就像您一样。

作为解决方法,我使用其他变体 -您可以在此处navigate({routeName, params, action, key})找到它。它总是有效的。