javascript - React Ant Design - 在功能组件中生成列的最佳位置
问题描述
我的应用程序使用非常密集的表格。我生成了相当复杂的表格,并自动计算了过滤器(例如,映射到值数组以获取当前数据集中的可能值)。所以基本上我的观点是它在某些页面上可能会很密集。
在性能方面,使用 Antdesign 在 React App 中生成列的最佳位置是什么?请注意,我们主要使用函数式组件,并在需要时使用 useState 钩子。
- 在 useState 挂钩中,并在生成完成后显示表格
- 直接在
<Table columns={generateCols()}>
- 别的东西?
IMO 第一个优点是,如果组件重新渲染,它不会重新生成列,但我不确定。第二个更易于维护且不太复杂,但如果重新渲染意味着再次生成列,我不确定增益!
谢谢
列存储在 useState 中的代码示例(可能有一些拼写错误,但您可以了解整体情况):
export function TableComponent(props: Props) {
const { meal, similarMeals } = props;
const [tableCols, setTableCols] = useState<ColumnProps<meal>[] | undefined>(
undefined
);
useEffect(() => {
setTableCols(
generateSimilarMealColumns(
meal.countOfIngredients,
meal.similarMeals
)
);
}, [meal.countOfIngredients, meal.similarMeals]);
return (
<>
<Container className={styles.section}>
{tableCols !== undefined ? (
<Table<meal>
rowKey="_id"
columns={tableCols}
dataSource={similarMeals}
pagination={false}
expandRowByClick={true}
expandedRowRender={(record) => <p>{record.longDescription}</p>}
/>
) : (
<Spin />
)}
</Container>
</>
);
}
解决方案
让我先说不要过早地做 perf 的事情。如果有效,请继续进行,直到无效为止。
其次,让我印象深刻的一件事是,每次渲染 Table 组件时,您都在调用一个函数来生成列。如果渲染您的组件的Table
组件被重新渲染,那么您可能会无缘无故地做一堆额外的工作。
Show the rest of the component that renders your Table
component - this might be a good use case for useMemo.
EDIT: As a possibility, you might be able to fix the whole thing simply by doing this:
<Table columns={useMemo(generateCols,[... list of dependencies that are used in here])}>
推荐阅读
- html - 微软边缘浏览器中的材料 UI 可见性密码出现问题检查了不同的方法
- grep - 如何从两个列表中删除列表中的目录?
- terraform - 如何将地形变量转换为二头肌兼容的参数/变量
- sql - 最后一行的 SQL 组和条件总和
- ansible - Ansible:比较字典并创建一个带有结果的新字典
- sql - 春季批处理中不支持查询计数会引发异常错误
- android - CropImageActivity - 在 Redmi 6A (Android 8.1.0) 上点击 CROP(应用程序崩溃)并在 Galaxy M30 (Android 10) 上运行
- sql - COUNT 和 COUNT 的 ROLLUP SUM
- python - 找不到 Selenium 的按钮
- angular - Angular - 在客户刷新页面或清理缓存之前,不会在生产中显示更改