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

React Native中FlatList嵌套对象访问问题咨询

问题解决:React Native FlatList访问嵌套对象报错

错误信息翻译

原错误:undefined is not an object (evaluating route.data.message)
→ "未定义不是对象(计算route.data.message时)"

核心问题

你犯了两个关键错误:

  1. 错误尝试访问route.data.message,但route中根本不存在data属性,你要展示的内容来自information数组的嵌套结构。
  2. 当前FlatList的数据源是外层的information数组,但每个元素下还有子数组data,你没有正确处理这种嵌套结构的渲染。

解决方案

方案1:展平嵌套数组,直接渲染所有条目

如果不需要按用户分组,先把嵌套的data数组展平成一维数组,让FlatList直接渲染:

const Owe = ({navigation, route}) => {
  // 展平嵌套的data数组
  const flatData = information.flatMap(item => item.data);
  
  return (
    <SafeAreaView>
      <FlatList
        data={flatData}
        renderItem={({item}) => 
        <View style={flatListStyle.container}>
          <Text style={titleBar.Text}>{item.message}</Text>
        </View>}
        keyExtractor={(item, index) => index.toString()}
      />
    </SafeAreaView>
  );
}

var information = [
  {nme:"Joe", data: [
    {owed:true, amount: 10, message:"Beer Money"},
    {owed:false,amount: 5, message:"Lunch"}
  ]},
  {nme:"Ben", data:[
    {owed:true, amount: 50, message:"Broke bitch"},
    {owed:false, amount: 12.50, message:"Milk"}
  ]}
];

方案2:嵌套渲染,按用户分组展示

如果需要保留用户分组的结构,在外层FlatList渲染每个用户,内层再用FlatList渲染该用户的所有明细:

const Owe = ({navigation, route}) => {
  return (
    <SafeAreaView>
      <FlatList
        data={information}
        renderItem={({item}) => 
        <View style={flatListStyle.userContainer}>
          <Text style={titleBar.userName}>{item.nme}</Text>
          {/* 内层FlatList渲染当前用户的所有data条目 */}
          <FlatList
            data={item.data}
            renderItem={({item: subItem}) => 
            <View style={flatListStyle.itemContainer}>
              <Text style={titleBar.Text}>{subItem.message}</Text>
            </View>}
            keyExtractor={(subItem, index) => index.toString()}
            nestedScrollEnabled={true}
          />
        </View>}
        keyExtractor={(item, index) => index.toString()}
      />
    </SafeAreaView>
  );
}

var information = [
  {nme:"Joe", data: [
    {owed:true, amount: 10, message:"Beer Money"},
    {owed:false,amount: 5, message:"Lunch"}
  ]},
  {nme:"Ben", data:[
    {owed:true, amount: 50, message:"Broke bitch"},
    {owed:false, amount: 12.50, message:"Milk"}
  ]}
];

重要提示

  • 必须给FlatList添加keyExtractor属性,避免性能警告。
  • 不需要替换成VirtualizedList,你的问题和数据源类型无关,只是属性访问错误和嵌套结构处理不当。

内容的提问来源于stack exchange,提问作者Joe Moore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:05:30