javascript - react-native 如何在路由参数中分配默认值
问题描述
如果之前我们以前做的其他屏幕没有发送任何内容,我想在路由参数中设置一个默认值
let phot0 = this.props.navigation.getParam("photo","empty");
在反应导航 5.x 中要做什么我的代码是..(第 5 行的困难)
import React from "react";
import { StyleSheet, Text, View, Image, Button } from "react-native";
export default function Home({ route, navigation }) {
const { photo } = route.params;
return (
<View style={styles.container}>
<Image
resizeMode="center"
style={styles.imageHolder}
source={photo === "empty" ? require("../assets/email.png") : photo}
/>
<Button
title="take photo"
style={styles.button}
onPress={() => navigation.navigate("Camera")}
/>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
imageHolder: {
alignSelf: "center",
},
button: {
margin: 20,
},
});
它还显示一些错误:未定义不是对象(评估'route.params.photo')..我是否总是需要在发送屏幕中声明参数?
解决方案
您可以将一些初始参数传递到react-navigation 版本 5中的屏幕,如下所示,
<Stack.Screen
name="Details"
component={DetailsScreen}
initialParams={{ itemId: 100 }}
/>
例如,如果您在导航到屏幕时未指定任何参数Details
,则将使用初始参数。
有关更多信息,请查看下面的完整示例
import * as React from "react";
import { Text, View, Button } from "react-native";
import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";
function HomeScreen({ navigation }) {
return (
<View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
<Text>Home Screen</Text>
<Button
title="Go to Details"
onPress={() => {
navigation.navigate("Details");
}}
/>
</View>
);
}
function DetailsScreen({ route, navigation }) {
return (
<View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
<Text>Details Screen</Text>
<Text>itemId: {route.params.itemId}</Text>
<Button title="Go back" onPress={() => navigation.goBack()} />
</View>
);
}
const Stack = createStackNavigator();
export default function App() {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen
name="Details"
component={DetailsScreen}
/**
* when you didn't specify itemId params the initial params will be used
*/
initialParams={{ itemId: 100 }}
/>
</Stack.Navigator>
</NavigationContainer>
);
}
希望这对您有所帮助。随意怀疑。
推荐阅读
- spring-boot - 带有弹簧引导的弹性 PreBuiltTransportClient 创建内存泄漏
- android - Android - 未显示第二个电话联系人的应用程序图标
- excel - Excel 公式到 DAX:如何引用上一行
- powershell - 如何使用 WinSCP 将名称中具有特定关键字的文件上传到 SFTP
- android - 我的项目的 apk 文件无法安装,我得到 Instant Ran 按摩
- java - Jenkins 在脚本化 Jenkinsfile 的分布式构建中找不到 krb5.conf 文件
- python - 如何通过 Selenium 根据 url 将文本发送到地理位置搜索框
- opencv - 在 Windows Server 2012 R2 x64 上使用 Python 3.6.4 的 OpenCV 导入 cv2:找不到 DLL
- mysql - 如何计算百分比?
- python - Django因模型名称中的特殊字符而窒息