reactjs - 重新加载我的 reactJS 项目时出现“错误:超出最大更新深度”
问题描述
我收到错误:重新加载我的反应项目后超出了最大更新深度。我正在制作一个动态表,其中列数根据 JSON 文件中的数据而变化。似乎错误只发生在这行代码中
const data = useMemo(() => MOCK_DATA, []);
const columns = Object.keys(data[1]).map((key, id) => {
return {
Header: key,
accessor: key
};
});
这是整个js文件
export const DisplayTable = () => {
const data = useMemo(() => MOCK_DATA, []);
const columns = Object.keys(data[1]).map((key, id) => {
return {
Header: key,
accessor: key
};
});
console.log(columns);
const tableInstance = useTable({
columns,
data
});
const {
getTableProps,
getTableBodyProps,
headerGroups,
rows,
prepareRow
} = tableInstance;
return (
<table {...getTableProps()}>
<thead>
{headerGroups.map((headerGroup) => (
<tr {...headerGroup.getHeaderGroupProps()}>
{headerGroup.headers.map((column) => (
<th {...column.getHeaderProps()}>{column.render("Header")}</th>
))}
</tr>
))}
</thead>
<tbody {...getTableBodyProps()}>
{rows.map((row) => {
prepareRow(row);
return (
<tr {...row.getRowProps()}>
{row.cells.map((cell) => {
return <td {...cell.getCellProps()}>{cell.render("Cell")}</td>;
})}
</tr>
);
})}
</tbody>
</table>
);
};
解决方案
如果您正在使用react-table
,请确保:
列也需要memoized
,因此您需要像数据一样包装在 useMemo 中。文档
const columns = useMemo(
() => Object.keys(data[1])
.map((key, id)=>{
return {
Header: key,
accessor: key
}
}, [data])
推荐阅读
- extjs - 如何在 Extjs 中的树存储数据中添加新根作为现有节点的父节点
- vue.js - 如何在 vuejs 中调用子函数?
- css - 为什么填充会破坏响应逻辑?
- c# - IEventHandler 可以返回 null 以外的任何内容吗?
- angular - Angular Material Stepper 和 Step 分别组件
- json - 需要使用正则表达式提取多值密钥对
- php - 如何在 get_instance 中添加 div 标签?
- sphinx - 如何在 SphinxQL 中使用 SNIPPET 函数?
- c++ - 如何从父线程继承模拟到所有子线程(WIN32)
- c# - 如何计算按短日期字符串分组的表的行数?