react-native - 未定义不是对象(评估“navigation.navigate”)无法解析
问题描述
我是反应原生的新手。我正在研究自己的项目并遇到问题,希望你们能尽可能详细地帮助我。这个想法是当我在 HomeScreen 上单击“Daily Mix 1”专辑时,它将导航到 DailyMix1 屏幕。但它显示错误Undefined is not an object (evaluate 'navigation.navigate')如下图所示。组件 Album1 在 HomeScreen 内部,而包含导航功能的 TouchableOpacity 在 Album1 内部。
主屏幕
const HomeScreen = ({ navigation }) => {
return (
<ScrollView vertical={true} style={styles.scrollViewSetting}>
<LinearGradient
colors={['#783C50', 'black']}
start={{ x: 0.5, y: 0 }}
end={{ x: 1, y: 0.5 }}
>
<View style={styles.screenCover}>
<StatusBar barStyle={"light-content"} translucent={true} backgroundColor='transparent' />
<View>
<FontAwesome
name="cog"
size={24}
color="#969696"
style={styles.settingIcon}
onPress={() => {
navigation.navigate("SettingsScreen");
}}
/>
</View>
<View>
<Album1 />
<Album2 />
</View>
</View>
</LinearGradient>
</ScrollView>
);
};
专辑1
const Album1 = ({ navigation }) => {
return (
<View>
<View>
<Text style={styles.headerStyle}>
Made for you
</Text>
</View>
<ScrollView horizontal={true}>
<View style={styles.listAlbum}>
{/* */}
<TouchableOpacity
onPress={() => { navigation.navigate("DailyMix1") }}>
<View>
<AlbumItem
name="Daily Mix 1"
image={album_image_1}
author="Shawn Mendes, Ed Sheeran"
/>
</View>
</TouchableOpacity>
{/* */}
<View>
<AlbumItem
name="Daily Mix 2"
image={album_image_2}
author="The Chainsmokers, Clean Bandit"
/>
</View>
</View>
</ScrollView>
</View>
);
};
堆栈导航
const HomeStackNavigation = () => {
return (
<Stack.Navigator>
<Stack.Screen
options={{
headerShown: false,
}}
name="Home"
component={HomeScreen} />
<Stack.Screen
options={{
title: '',
headerTransparent: true,
headerBackTitle: ' ',
headerTintColor: 'white',
gestureEnabled: false,
}}
name="DailyMix1" component={DailyMix1} />
</Stack.Navigator>
);
};
每日混合1
const DailyMix1 = ({ navigation = this.props.navigation }) => {
return (
<View style={styles.background}>
<StatusBar barStyle={"light-content"} translucent={true} />
<View style={styles.firstView}>
<LinearGradient
colors={['#52524B', '#121212']}
style={styles.linearGradient}
start={{ x: 0.95, y: 0.3 }}
end={{ x: 0.95, y: 0.95 }}
>
<Image source={require('../components/assets/album1/album_image_1.png')} style={styles.imageStyle} />
<Text style={styles.nameStyle}>
Daily Mix 1
</Text>
<Text style={styles.subNameStyle}>
MADE FOR YOU
</Text>
</LinearGradient>
</View>
</View>
)
}
我尝试添加{ ...this.props }
并<Album1 />
更改naviation.navigate
为Album1.js
,this.props.navigation.navigate
但它产生了相同的错误。
希望你们能帮助我,并告诉我在哪里进行任何更正。谢谢你。
解决方案
只需将导航道具传递给Album1
组件
const HomeScreen = ({ navigation }) => {
return (
<ScrollView vertical={true} style={styles.scrollViewSetting}>
<LinearGradient
colors={['#783C50', 'black']}
start={{ x: 0.5, y: 0 }}
end={{ x: 1, y: 0.5 }}
>
<View style={styles.screenCover}>
<StatusBar barStyle={"light-content"} translucent={true} backgroundColor='transparent' />
<View>
<FontAwesome
name="cog"
size={24}
color="#969696"
style={styles.settingIcon}
onPress={() => {
navigation.navigate("SettingsScreen");
}}
/>
</View>
<View>
<Album1 navigation={navigation}/> // Pass Navigation to Album1 as a prop
<Album2 />
</View>
</View>
</LinearGradient>
</ScrollView>
);
};
推荐阅读
- reactjs - 要使用 SmartCard 身份验证制作 React 应用程序,我应该使用 pkcs11 吗?
- jquery - 如何知道拖动了哪个类draggable
- excel - 函数问题:Excel VBA 中的日期过滤器
- c# - 如何在C#winform中使用相对地址读取文件
- rest - 为同一个 REST 资源混合不同的 2xx 响应代码
- c# - 与 C# 中的泛型参数混淆
- r - 预测和应用功能
- python - R markdown 使用不同的配色方案来区分 r 和 python 代码块
- c++ - 查找 JSON 文档中所有值的所有路径
- swift - 如何将 iPad 屏幕分成 4 等份?