reactjs - React Native:使用堆栈导航器将数据从屏幕传递到组件到另一个屏幕
问题描述
我有一个问题,我在主屏幕中使用堆栈导航器并且我正在其中呈现一个作业组件,在该作业组件中我有一个名称标题。因此,当工作组件在我的主屏幕中呈现并且用户单击该标题时,我想将他带到工作描述屏幕,但我也想将该标题数据传递到描述屏幕。 使用堆栈导航器将数据从一个屏幕传递到另一个屏幕是直截了当的。但是我发现很难将数据从一个屏幕传递到一个组件到另一个屏幕。我设法通过作业组件从一个屏幕导航到另一个屏幕,但无法通过作业组件将数据传递到职位描述屏幕。
这就是我在主屏幕中呈现作业组件的方式
<Jobs
jobs={this.state.jobs}
isSignedIn={this.state.isSignedIn}
description={() =>
this.props.navigation.navigate("JobDescription", {
job: this.state.jobs,
})
}
/>
这是我的工作组件
const Jobs = (props) =>
props.jobs.map((job) => {
return (
<Card key={job.title}>
<CardItem>
<Body>
<View>
<TouchableOpacity onPress={props.description}>
<Text
style={{
marginTop: 10,
marginLeft: 25,
color: "blue",
fontSize: 22,
}}
>
{job.name}
</Text>
</TouchableOpacity>
</View>
这是我的工作描述代码示例
const JobDescription = (props) => {
return (
<Container>
<Headers drawer={() => props.navigation.openDrawer()} />
<ScrollView>
<View style={{ padding: 10, marginTop: 30 }}>
<Text style={{ fontSize: 30 }}>
{props.navigation.getParam("name")}
</Text>
解决方案
似乎您正在通过“作业”导航参数传递作业数组。您可能希望传递您正在点击的作业,以便在 JobsDescription 组件中获取所选作业的所有相关数据,而不是所有作业数组。
例子:
{/* Pass the selected job to the "description" method. */}
<Jobs
jobs={this.state.jobs}
isSignedIn={this.state.isSignedIn}
description={(selectedJob) =>
this.props.navigation.navigate("JobDescription", {
job: this.state.jobs,
selectedJob
})
}
/>
const Jobs = (props) =>
props.jobs.map((job) => {
return (
<Card key={job.title}>
<CardItem>
<Body>
<View>
<TouchableOpacity onPress={() => props.description(job)}>
<Text
style={{
marginTop: 10,
marginLeft: 25,
color: "blue",
fontSize: 22,
}}
>
{job.name}
</Text>
</TouchableOpacity>
</View>
所以你可以做这样的事情
const JobDescription = (props) => {
const { navigation } = props;
// Getting the selected job data through the navigation parameter.
const selectedJob = navigation.getParam("selectedJob");
return (
<Container>
<Headers drawer={() => props.navigation.openDrawer()} />
<ScrollView>
<View style={{ padding: 10, marginTop: 30 }}>
<Text style={{ fontSize: 30 }}>
{selectedJob.title}
</Text>
推荐阅读
- oracle - 在 Oracle 的单行中按唯一 ID 对多列数据进行分组
- webrtc - 不附加到 html 元素的 WebRTC 音频流
- google-sheets - 如何在 =OR() 语句中简化这样的语句?
- c - 在自定义地址启动/执行具有初始堆栈的进程
- php - Laravel 注册后无法登录用户
- python - 如何在python中使用霍夫变换检测抛物线
- wordpress - 想要在古腾堡全宽上制作特定部分
- python - Pandas:我如何分组,但前提是数据满足该组中的特定条件。即*仅当*该组中有负值
- substrate - 如何将十六进制字符串转换为 Vec
- php - 如何将新输入添加为下拉类型并填充默认选项到 laravel jetstream 注册表单