开发者问题收集

TypeError:未定义不是一个对象(评估'_this.props.navigation')

2020-09-01
102

我尝试将对象从一个屏幕传递到另一个屏幕,但总是出现错误:

TypeError: undefined is not an object (evaluating '_this.props.navigation')

我尝试了一些我看到的解决方案,但都没有奏效,我不明白为什么它不起作用。

这是我在 App.js 中设置导航的方式:

const App = () => {

  const Stack = createStackNavigator();

  return (
    <>
      <NavigationContainer >
        <Stack.Navigator
          screenOptions={{
            headerShown: false
          }}
        >
          <Stack.Screen
            name="Home"
            component={HomeScreen}
          />
          <Stack.Screen
            name="AddMeeting"
            component={AddMeetingScreen}
          />
          <Stack.Screen
            name="MeetingDetails"
            component={MeetingDetailsScreen}
          />
        </Stack.Navigator>
      </NavigationContainer>
    </>
  );
};

我有一个主屏幕,其中包含一个虚拟对象,以及一个在屏幕上的按钮被点击时调用的函数。

这是 HomeScreen.js

const HomeScreen = ({ navigation }) => {

const meeting = new Meeting("Subject", "Init", "Participants", "Location", "Date", "00:00")

_showMeetingDetails = () => {
    this.props.navigaton.navigate('MeetingDetails', { Meeting: meeting });
}

return (
    <>
        <SafeAreaView style={styles.homeContainer}>
                <TouchableOpacity style={styles.cardButton} onPress={this._showMeetingDetails}>
                    <MeetingCard meetingModel={meeting} />
                </TouchableOpacity>
        </SafeAreaView>
    </>
)
}
2个回答

Homescreen 是一个函数组件,函数有自己的 this

您可以直接使用在函数参数中传递的 navigaton

因此,您的 _showMeetingDetails 函数将是这样的,

_showMeetingDetails = () => {
   navigaton.navigate('MeetingDetails', { Meeting: meeting });
}
Anup
2020-09-01

如果您尝试从类组件导航,则应使用

this.props.navigaton.navigate('MeetingDetails', { Meeting: meeting });

但在您的情况下,您可以直接调用 navigation.navigate ,如下所示

navigaton.navigate('MeetingDetails', { Meeting: meeting });
Sourav Dey
2020-09-01