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

React Native:嵌套组件场景下通过Route传递分类ID至目标页面

实现React Native分类卡片点击传递对应ID到目标页面

要实现点击分类卡片时传递对应分类的ID到MealsOverView页面,需要逐层修改组件的 onPress 逻辑,把当前点击项的ID传递下去,具体步骤如下:

1. 修改分类卡片组件 DormeeelGridCard

让Pressable的点击事件触发时,把当前分类的ID传给父组件的onPress方法:

function DormeeelGridCard({item, onPress}) {
  return (
    <View style={[styles.gridcard, {backgroundColor: item.color}]}>
      <Pressable
        style={({pressed}) => [
          styles.button,
          pressed ? styles.buttonpressed : null,
        ]}
        onPress={() => onPress(item.id)} // 传入当前点击分类的ID
      >
        <View style={styles.innercontainer}>
          <Text style={styles.gridtext}>{item.title}</Text>
        </View>
      </Pressable>
    </View>
  );
}

2. 修改FlatlistDormeel组件

直接透传onPress方法给卡片组件,确保每个卡片能把自身ID传递出去:

function FlatlistDormeel({data, onPress}) {
  function renderCategoryItem({item}) {
    return <DormeeelGridCard item={item} onPress={onPress} />; // 透传点击事件
  }
  return (
    <View style={styles.catgridcontainer}>
      <FlatList
        data={data}
        renderItem={renderCategoryItem}
        keyExtractor={item => item.id}
        numColumns={2}
      />
    </View>
  );
}

3. 修改CategoriesScreen组件

更新点击处理函数,接收分类ID并通过导航传递给目标页面:

import React from 'react';
import {View, StyleSheet} from 'react-native';
import FlatlistDormeel from '../components/FlatlistDormeel';
import {CATEGORIES} from '../data/dummy-data';

function CategoriesScreen({navigation}) {
  // 接收点击传来的分类ID
  function onPressHandler(categoryId) {
    navigation.navigate('MealsOverviewScreen', {
      categoryId: categoryId, // 传递目标分类ID
    });
  }
  return (
    <View>
      <FlatlistDormeel
        style={styles.catcontainer}
        data={CATEGORIES}
        onPress={onPressHandler}
      />
    </View>
  );
}
export default CategoriesScreen;

const styles = StyleSheet.create({
  catcontainer: {
    flex: 1,
  },
});

4. 修改MealsOverView页面

接收传递的分类ID,还可以根据ID筛选出对应分类的详细信息:

import React from 'react';
import {View, Text, StyleSheet} from 'react-native';
import {useRoute} from '@react-navigation/native';
import {CATEGORIES} from '../data/dummy-data'; // 引入分类数据

function MealsOverView() {
  const route = useRoute();
  const categoryId = route.params?.categoryId; // 获取传递的分类ID
  // 根据ID匹配对应的分类信息
  const selectedCategory = CATEGORIES.find(cat => cat.id === categoryId);

  return (
    <View style={styles.container}> {/* 修正原代码的styles拼写错误 */}
      <Text>当前分类:{selectedCategory?.title}</Text>
      <Text>分类ID:{categoryId}</Text>
    </View>
  );
}
export default MealsOverView;

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
  },
});

内容的提问来源于stack exchange,提问作者Krishna Gaurav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:06:28