我在用着meterial-table
with React
。我正在尝试从来自这样的 api 的数组中分配数据
<MaterialTable
columns={columns}
data={rows}
...
/>
Where columns
and rows
是api数据。但我收到这个错误:
TypeError: Cannot add property tableData, object is not extensible
值得注意的是,当我使用模拟硬编码数据时,一切都运行良好。经过一番搜索,我找不到任何解决方案,有什么帮助吗?
这与以下无关material-table
or React
。这很可能与您的 api 响应有关Object.preventExtensions()
由于某种原因应用于它,也许这是一个Axios
行为。所以当material-table
正在尝试添加一个id
字段到每个对象,它都面临这个错误。
尽管不是最佳选择,但请尝试将 api 数据复制到新的对象数组中,以便material-table
可以修改它们,例如:
const editable = rows.map(o => ({ ...o }));
<MaterialTable
columns={columns}
data={editable}
...
/>
请注意,我没有使用rows.map(o => o)
因为这将复制具有相同对象引用的数组
EDIT:
值得一提的是,使用扩展运算符 or 对象.分配只会给出浅拷贝,即不会复制嵌套对象。解决此问题的一种方法是使用JSON.parse(JSON.stringify(object))
。请注意,这会导致一些数据丢失,其他替代方案在此答案中:在 JavaScript 中深度克隆对象最有效的方法是什么? https://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-deep-clone-an-object-in-javascript
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)