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

React中能否直接将类实例对象作为Material-Table的data数据源

问题原因及解决方案

第一步:排查官方给出的三类常规触发原因

  • 版本不匹配校验
    执行以下命令检查react和react-dom版本是否一致:
npm ls react
npm ls react-dom

如果两个包版本号不同,统一升级为相同版本即可解决。

  • Hook使用规则校验
    检查你的ProductImpl类、以及它实现的Product接口关联的所有代码,是否存在Hook调用逻辑:Hook只能在函数组件顶层、自定义Hook内部调用,不能在普通类的构造函数、类方法、普通工具函数里调用。你触发这个报错大概率是你在实例化ProductImpl的时候,类内部逻辑中意外调用了Hook导致的。
  • 多份React副本校验
    执行npm ls react如果输出了多个不同版本的react包,说明项目中存在多份React副本,删除项目下的node_modules文件夹、package-lock.json(或yarn.lock)文件后重新执行npm install(或yarn install)即可解决。

第二步:Material-Table兼容处理

如果上述排查都没有问题,就是Material-Table自身对自定义类实例的兼容问题:
Material-Table内部处理数据源时会默认做浅拷贝、属性遍历操作,自定义类的实例不可枚举属性或者原型链会干扰内部逻辑,你可以在传入数据时将类实例转换为普通JS对象即可,修改state初始化代码为:

const [data, setData] = useState([{...new ProductImpl(1, "productName", "description of product", 12.50, new Date(), 1)}]);

后续通过setData更新数据时,也统一将类实例转成普通对象传入即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:18:02