路由特定屏幕后重复弹出 "undefined is not an object (evaluating 'navigation.navigate')"
Repeatedly popping "undefined is not an object (evaluating 'navigation.navigate')" after routing a particular screen
const ResolvedPlaces = ({navigation}) => {
return(
<View style={Styles.headerWrapper}>
<TouchableOpacity navigation={navigation} onPress={()=> navigation.navigate("ProfileScreen")} >
<Text style={[Styles.header,{fontWeight:"bold"}]}>Resolved </Text>
<Text style={Styles.header}> places</Text>
</TouchableOpacity>
</View>
)
}
我创建了一个 ResolvedPlaces 函数,并提供了一个路由到配置文件屏幕的选项。我还解构了所有格式的“导航”。但我不断得到这个 navgation.navigate 作为未定义的对象。
the error message on the terminal
如果 ResolvedPlaces
未定义为 react-native-navigation navigator
中的 Screen
,则 navigation prop
不会自动传递给组件 ResolvedPlaces
。
如果 ResolvedPlaces
嵌套在 Navigator
中定义的 Screen
中,那么您可以直接使用 navigation prop
。这可能如下所示。
const SomeScreen = ({navigation}) => {
const ResolvedPlaces = () => {
return(
<View style={Styles.headerWrapper}>
<TouchableOpacity onPress={()=> navigation.navigate("ProfileScreen")} >
<Text style={[Styles.header,{fontWeight:"bold"}]}>Resolved </Text>
<Text style={Styles.header}> places</Text>
</TouchableOpacity>
</View>
)
}
return (
<ResolvedPlaces />
)
}
组件 SomeScreen
必须在导航器中定义,例如Stack
.
如果 ResolvedPlaces
是在其自己的文件中定义的组件,则将 navigation
对象作为来自定义为屏幕的父项的道具传递。
const SomeScreen = ({navigation}) => {
return <ResolvedPlaces navigation={navigation} />
}
如果这不是一个选项,您仍然可以使用 useNavigation
挂钩,如下所示。
const ResolvedPlaces = () => {
const navigation = useNavigation()
return (
<View style={Styles.headerWrapper}>
<TouchableOpacity onPress={()=> navigation.navigate("ProfileScreen")} >
<Text style={[Styles.header,{fontWeight:"bold"}]}>Resolved </Text>
<Text style={Styles.header}> places</Text>
</TouchableOpacity>
</View>
)
}
备注: 我已经从 TouchableOpacity
中删除了导航道具,因为该组件不存在该道具。基本 react-native-navigation
结构记录在案 here。
const ResolvedPlaces = ({navigation}) => {
return(
<View style={Styles.headerWrapper}>
<TouchableOpacity navigation={navigation} onPress={()=> navigation.navigate("ProfileScreen")} >
<Text style={[Styles.header,{fontWeight:"bold"}]}>Resolved </Text>
<Text style={Styles.header}> places</Text>
</TouchableOpacity>
</View>
)
}
我创建了一个 ResolvedPlaces 函数,并提供了一个路由到配置文件屏幕的选项。我还解构了所有格式的“导航”。但我不断得到这个 navgation.navigate 作为未定义的对象。 the error message on the terminal
如果 ResolvedPlaces
未定义为 react-native-navigation navigator
中的 Screen
,则 navigation prop
不会自动传递给组件 ResolvedPlaces
。
如果 ResolvedPlaces
嵌套在 Navigator
中定义的 Screen
中,那么您可以直接使用 navigation prop
。这可能如下所示。
const SomeScreen = ({navigation}) => {
const ResolvedPlaces = () => {
return(
<View style={Styles.headerWrapper}>
<TouchableOpacity onPress={()=> navigation.navigate("ProfileScreen")} >
<Text style={[Styles.header,{fontWeight:"bold"}]}>Resolved </Text>
<Text style={Styles.header}> places</Text>
</TouchableOpacity>
</View>
)
}
return (
<ResolvedPlaces />
)
}
组件 SomeScreen
必须在导航器中定义,例如Stack
.
如果 ResolvedPlaces
是在其自己的文件中定义的组件,则将 navigation
对象作为来自定义为屏幕的父项的道具传递。
const SomeScreen = ({navigation}) => {
return <ResolvedPlaces navigation={navigation} />
}
如果这不是一个选项,您仍然可以使用 useNavigation
挂钩,如下所示。
const ResolvedPlaces = () => {
const navigation = useNavigation()
return (
<View style={Styles.headerWrapper}>
<TouchableOpacity onPress={()=> navigation.navigate("ProfileScreen")} >
<Text style={[Styles.header,{fontWeight:"bold"}]}>Resolved </Text>
<Text style={Styles.header}> places</Text>
</TouchableOpacity>
</View>
)
}
备注: 我已经从 TouchableOpacity
中删除了导航道具,因为该组件不存在该道具。基本 react-native-navigation
结构记录在案 here。