数据表格 - 性能
使用本指南中的建议来提升 DataGrid 的性能。
提取静态对象并记忆根属性
Data Grid 组件使用 React.memo 来优化其性能,这意味着只有当其自身及其子组件的属性发生变化时才会重新渲染。但是,如果你的 Data Grid 的根属性没有被记忆化,很容易导致不必要的重新渲染。以下面的例子为例,slots 和 initialState 对象在每次渲染时都会被重新创建,这意味着 Data Grid 本身也不得不重新渲染。
function Component(props) {
return (
<DataGrid
rows={props.rows}
slots={{
row: CustomRow,
}}
cellModesModel={{ [props.rows[0].id]: { name: { mode: GridCellModes.Edit } } }}
/>
);
}
防止重新渲染的一个简单方法是提取任何可以作为静态对象的对象,并记忆化任何依赖于另一个对象的对象。这适用于任何作为对象或函数的属性。
const slots = {
row: CustomRow,
};
function Component(props) {
const cellModesModel = React.useMemo(
() => ({ [props.rows[0].id]: { name: { mode: GridCellModes.Edit } } }),
[props.rows],
);
return (
<DataGrid rows={props.rows} slots={slots} cellModesModel={cellModesModel} />
);
}
可视化
DataGrid 记忆化了它的一些子组件,以避免不必要的重新渲染。下面是一个可视化示例,展示了哪些单元格会因你与表格的交互而重新渲染。