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

React Native中无法将数组数据渲染到react-native-table-component表格

解决React Native中使用react-native-table-component遍历数组渲染表格的问题

你遇到的问题主要来自两个核心点:tableData初始状态为undefined,以及数据格式和表格组件要求不匹配,我来一步步帮你梳理解决:

1. 报错原因解析

  • 异步数据加载问题:API请求是异步执行的,组件首次渲染时props.data还没拿到接口返回值,此时tableData是undefined,直接调用map方法自然会抛出undefined is not an object的错误。
  • 语法与格式问题:你代码里的Table标签多了一个多余的/>,会导致JSX结构报错;同时react-native-table-component的Row组件要求data属性是数组类型,但你传入的是单个对象,格式不匹配。

2. 完整修复方案

第一步:给tableData设置默认值

在定义tableData时,给它一个空数组作为默认值,确保即使数据还未返回,也能安全调用数组方法:

const tableData = props.data || [];

第二步:转换数据格式适配表格组件

根据你定义的表头['Sl No.','Fee Name','Due Date','Fee To Be Paid','Due Amount'],把每个对象的对应字段提取出来组成数组,匹配表头顺序:

// 每个feeItem对象转成对应表头的数组
[
  i + 1, // 序号
  feeItem.FeeName,
  feeItem.Duedate,
  feeItem.TobePaidAmt,
  feeItem.DueAmt
]

第三步:修正JSX语法错误

删除Table标签中多余的/>,确保组件结构闭合正确。

修改后的完整代码

import React from "react";
import { StyleSheet, View, ScrollView, Text } from "react-native";
import { Table, Row } from 'react-native-table-component';

const StudentFeeTable = props => {
  const tableHead = ['Sl No.','Fee Name','Due Date','Fee To Be Paid','Due Amount']
  // 给tableData设置默认空数组,避免undefined
  const tableData = props.data || [];

  return (
    <ScrollView horizontal={true}>
      <View style={styles.container}>
        <Text>FEE PAID DETAILS</Text>
        <Table borderStyle={{borderWidth: 2, borderColor: '#c8e1ff'}}>
          <Row data={tableHead} style={styles.head} textStyle={styles.text}/>
          {/* 先判断tableData存在,再遍历并转换数据格式 */}
          {tableData.map((feeItem, i) => (
            <Row 
              key={i} 
              data={[
                i + 1, // 生成序号
                feeItem.FeeName,
                feeItem.Duedate,
                feeItem.TobePaidAmt,
                feeItem.DueAmt
              ]} 
              textStyle={styles.text} 
            />
          ))}
        </Table>
      </View>
    </ScrollView>
  );
};

const styles = StyleSheet.create({
  container: { flex: 1, padding: 16, paddingTop: 30, backgroundColor: '#fff' },
  head: { height: 40, backgroundColor: '#f1f8ff', width: 550},
  text: { margin: 6 }
});

export default StudentFeeTable;

额外优化建议

  • 在Redux的reducer中,把fee相关状态的初始值设为空数组,避免组件首次获取状态时拿到undefined。
  • 可以添加加载状态提示,比如当数据还在请求时显示Loading...,提升用户体验。

内容的提问来源于stack exchange,提问作者Poornima Gurudath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:57:31