javascript - Material 表 TypeError : Cannot add property tableData, 对象不可扩展

标签 javascript reactjs axios material-ui material-table

我正在使用 meterial-tableReact。我正在尝试从来自这样的 api 的数组中分配数据

<MaterialTable
  columns={columns}
  data={rows}
  ...
/>

其中是api数据。但是我收到了这个错误:

TypeError: Cannot add property tableData, object is not extensible

值得注意的是,当我使用模拟硬编码数据时,一切正常。经过一番搜索,我找不到任何解决方案,有帮助吗?

最佳答案

您很可能正在使用 immer 或在后台使用 immer 的库(例如 @reduxjs/toolkit)。 immer 使用 Object.freeze 使其生成的对象不可变。

material-table 修改自己的 Prop (这是一个非常丑陋的反模式)。当图书馆违反规则时,他们将不会与试图强制执行规则的图书馆合作。

无法解冻已卡住的对象,但您有两种选择:

  1. 找到一种在 immer 实例中禁用卡住的方法(查看 API 文档,了解您认为可能卡住状态的任何内容)。

  2. 覆盖 Object.freeze 使其什么也不做(非常 hacky,应该避免 - 但它可能是你最好的选择):

window.Object.freeze = function(obj) { return obj }
  1. 在将状态传递给 MaterialTable 之前克隆/深度复制您的状态。这也远非理想,尤其是当您有大量数据时。

关于javascript - Material 表 TypeError : Cannot add property tableData, 对象不可扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59648434/

相关文章:

javascript - React 和 Material 用户界面 : how can I expand only one single card

reactjs - http-proxy-middleware 不捕获从 react 应用程序到 API 的请求

javascript - Jquery,textarea 中的换行符.. 不要得到\n 并得到 ↵

javascript - 如何为 'mailto' 建立 Gatsby 链接?

javascript - Chrome 在事件被阻止后显示目标链接

node.js - 我的 docker 容器在哪个端口上运行着 React 应用程序? Reacts 的默认 PORT 或来自 Dockerfile 的 EXPOSE?

javascript - $_POST 未读取 Axios 发布参数

javascript - 在 Spotify API 中授权期间获取 HTTP 415 不支持的媒体类型

javascript - 将数据库格式从 Chrome 转移到 Firefox

javascript - 使用 JS CSS 设置位置会导致与使用纯 CSS 进行相同设置不同的结果