You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native开发中如何通过onPress事件将父组件字典值传递到子页面

解决方案

你使用的React Navigation路由的navigate方法本身支持第二个入参,作为传递给目标页面的路由参数,直接按如下方式修改即可:

1. 修改父组件onPress逻辑

你原来的写法把Salad.GreekSalad放在箭头函数的形参位置,完全不会起到传值作用,调整后的代码如下:

<TouchableOpacity onPress={() => {
  // navigate第二个参数就是要传给子页面的参数对象,可自定义键名
  props.navigation.navigate("InnerMenu", {
    saladKey: "GreekSalad", // 传沙拉对应的键
    saladValue: Salad.GreekSalad // 传沙拉对应的属性数组
  })
}}>
  <ImageDetail 
    title={Salad.GreekSalad[0]} 
    description={Salad.GreekSalad[1]} 
    imageSource={Salad.GreekSalad[2]} 
    price={Salad.GreekSalad[3]}
  />
</TouchableOpacity>

2. 子页面InnerMenu接收参数

如果是函数组件,用useRoute钩子取参数即可:

import { useRoute } from '@react-navigation/native';

const InnerMenu = () => {
  const route = useRoute();
  // 解构获取父页面传过来的参数
  const { saladKey, saladValue } = route.params;
  // 后续可以直接使用参数,比如saladValue[0]就是沙拉名称,saladValue[3]是价格
  return <View>{/* 页面业务逻辑 */}</View>
}

如果是类组件,通过this.props.route.params获取即可。

可选优化方案

你当前每个沙拉条目都手动写代码非常冗余,可以直接遍历Salad对象批量渲染,后续加新沙拉品类只需要修改Salad对象即可:

{Object.entries(Salad).map(([saladKey, saladValue]) => (
  <TouchableOpacity 
    key={saladKey}
    onPress={() => {
      props.navigation.navigate("InnerMenu", { saladKey, saladValue })
    }}
  >
    <ImageDetail 
      title={saladValue[0]} 
      description={saladValue[1]} 
      // 适配没有上传图片的沙拉,自动用默认logo
      imageSource={saladValue[2] || require('../../assets/KabobHouseLogo.jpg')} 
      // 自动取数组最后一位作为价格,兼容不同长度的属性数组
      price={saladValue.at(-1)}
    />
  </TouchableOpacity>
))}

内容的提问来源于stack exchange,提问作者jamal seder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:06:04