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

React JS用JSON渲染DataTable时报Cannot read properties of undefined (reading 'mData')错如何解决

解决方案

这个TypeError: Cannot read properties of undefined (reading 'mData')错误通常是jQuery DataTable初始化时机不对、列配置与JSON数据不匹配、重复初始化导致的,按以下步骤排查即可解决:

1. 调整DataTable初始化时机

你需要确保JSON数据已经加载完成、且表格DOM通过map渲染完成后,再初始化DataTable实例。不要在组件刚挂载时就执行初始化逻辑,要把数据状态加入useEffect的依赖项:

import { useEffect, useState } from 'react';
import $ from 'jquery';
import 'datatables.net';

const MyTable = () => {
  const [tableData, setTableData] = useState([]);

  // 模拟获取JSON数据
  useEffect(() => {
    fetch('/your/data.json')
      .then(res => res.json())
      .then(data => setTableData(data));
  }, []);

  // 等tableData加载完成后再初始化DataTable
  useEffect(() => {
    // 数据为空时不执行初始化
    if(tableData.length === 0) return;
    // 先销毁已存在的实例避免重复初始化报错
    if ($.fn.DataTable.isDataTable('#sortTable')) {
      $('#sortTable').DataTable().destroy();
    }
    // 初始化表格
    $('#sortTable').DataTable();
  }, [tableData]); // 依赖项加入tableData

  return (
    <table id="sortTable">
      <thead>
        <tr>
          <th>姓名</th>
          <th>年龄</th>
          <th>部门</th>
        </tr>
      </thead>
      <tbody>
        {tableData.map(item => (
          <tr key={item.id}>
            <td>{item.name}</td>
            <td>{item.age}</td>
            <td>{item.department}</td>
          </tr>
        ))}
      </tbody>
    </table>
  )
}

2. 优先使用DataTable内置数据加载能力(更稳定)

不用手动写map渲染表格行,直接把JSON数据传入DataTable的data配置项,由插件自行渲染,完全规避时机不一致的问题:

useEffect(() => {
  if(tableData.length === 0) return;
  if ($.fn.DataTable.isDataTable('#sortTable')) {
    $('#sortTable').DataTable().destroy();
  }
  $('#sortTable').DataTable({
    data: tableData, // 直接传入JSON数组
    columns: [
      { data: 'name' }, // 和JSON字段严格对应
      { data: 'age' },
      { data: 'department' }
    ]
  });
}, [tableData]);

// 表格部分不需要写tbody里的map逻辑
return (
  <table id="sortTable">
    <thead>
      <tr>
        <th>姓名</th>
        <th>年龄</th>
        <th>部门</th>
      </tr>
    </thead>
    <tbody></tbody>
  </table>
)

3. 排查列配置与JSON字段匹配性

如果用内置data加载的方式,要确保columns配置里的data属性值和JSON返回的对象字段名完全一致,大小写、拼写都不能出错,缺失对应字段也会触发该报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:54:02