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

使用TanStack React Table v8报错:Cannot read properties of undefined (reading 'length')

解决TanStack React Table v8的"Cannot read properties of undefined (reading 'length')"错误

以下是导致错误的核心问题及对应修复方案:

1. 初始数据状态未正确初始化

父组件中defaultData初始值设为null,接口请求完成前传给子组件的data是null,但TanStack React Table要求数据必须是数组类型,这会导致表格无法正常初始化。

修复:将初始状态改为空数组

const [defaultData, setDefaultData] = useState([]) // 替换null为[]

2. useReactTable配置参数错误

useReactTable的配置项中,数据字段的正确键名是data,而非你写的dataTable,这会导致表格无法读取到数据,进而调用getRowModel()时触发空值错误。

修复:修正配置参数名

const table = useReactTable({
  data: dataTable, // 替换dataTable为data
  columns,
  getCoreRowModel: getCoreRowModel(),
});

3. 列定义的accessorKey拼写错误&字段不匹配

父组件的列配置存在多处拼写错误,同时字段名与接口返回不匹配:

  • assecorKey/accesorKey → 正确拼写为accessorKey
  • userID → 接口返回字段为userId(小写d),需保持一致

修复:修正列定义

const columns = [
  {
    id: 1,
    label: 'user ID',
    accessorKey: 'userId'
  },
  {
    id: 2,
    label: 'id',
    accessorKey: 'id'
  },
  {
    id: 3,
    label: 'body',
    accessorKey: 'body'
  },
  {
    id: 4,
    label: 'title',
    accessorKey: 'title'
  },
]

4. useMemo使用不规范

子组件中useMemo缺少依赖数组,无法正确缓存数据,可能导致不必要的重渲染或数据异常。

修复:添加依赖数组

const dataTable = useMemo(() => data, [data]); // 添加[data]依赖

完整修正后的代码

父组件(Vendor.js)

'use client'
import React, { useEffect, useState } from 'react'
import BasicTable from '../components/BasicTable'
import axios from 'axios';

export default function Vendor() {
  const [defaultData, setDefaultData] = useState([])

  useEffect(() => {
    const generateData = async() => {
      axios.get('https://jsonplaceholder.typicode.com/posts')
        .then((response) => setDefaultData(response.data))
    }
    generateData()
  }, [])

  const columns = [
    {
      id: 1,
      label: 'user ID',
      accessorKey: 'userId'
    },
    {
      id: 2,
      label: 'id',
      accessorKey: 'id'
    },
    {
      id: 3,
      label: 'body',
      accessorKey: 'body'
    },
    {
      id: 4,
      label: 'title',
      accessorKey: 'title'
    },
  ]
  return (
    <div>
      <h1>Vendor</h1>
      <BasicTable data={defaultData} columns={columns}/>
    </div>
  )
}

子组件(BasicTable.js)

import React from "react";
import {
  useReactTable,
  getCoreRowModel,
  flexRender,
} from "@tanstack/react-table";
import { useMemo } from "react";

export default function BasicTable({ data, columns }) {
  const dataTable = useMemo(() => data, [data]);
  const table = useReactTable({
    data: dataTable,
    columns,
    getCoreRowModel: getCoreRowModel(),
  });
  return (
    <div>
      Basic table
      <div className="border-solid border-2 rounded mt-5">
        <table>
          {table.getHeaderGroups().map((headerGroup) => (
            <tr key={headerGroup.id}>
              {headerGroup.headers.map((header) => (
                <th key={header.id}>
                  {flexRender(
                    header.column.columnDef.label,
                    header.getContext()
                  )}
                </th>
              ))}
            </tr>
          ))}
          <tbody>
            {table.getRowModel().rows.map(row => (
                <tr key={row.id}>
                    {row.getVisibleCells().map(cell => (
                        <td key={cell.id}>
                            {flexRender(cell.column.columnDef.cell || cell.getValue(), cell.getContext())}
                        </td>
                    ))}
                </tr>
            ))}
          </tbody>
        </table>
      </div>
    </div>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:07:42