antd模态框里得table表格进行勾选得时候会闪烁,怎么样解决用react hooks写一个小demo
时间: 2024-03-16 08:44:26 浏览: 169
ant-design-editable-tree-table:可编辑的树形表格,有两个分支哦,v4 是 antd v4 的版本
5星 · 资源好评率100%
好的,我来帮你解决这个问题。首先,要解决这个问题,我们需要理解为什么会出现闪烁的情况。通常,当我们在勾选table中的条目时,会导致React重新渲染组件,这就会导致闪烁的情况发生。为了避免这种情况,我们可以使用React Hooks中的useMemo()和useCallback()来优化代码。
下面是一个基于React Hooks的解决方案:
```jsx
import React, { useState, useMemo, useCallback } from 'react';
import { Modal, Table } from 'antd';
const data = [];
for (let i = 0; i < 100; i++) {
data.push({
key: i,
name: `Name ${i}`,
age: Math.floor(Math.random() * 100),
address: `Address ${i}`,
});
}
const DemoTable = ({ visible, onCancel }) => {
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const onSelectChange = useCallback((selectedKeys) => {
setSelectedRowKeys(selectedKeys);
}, []);
const columns = useMemo(
() => [
{
title: 'Name',
dataIndex: 'name',
},
{
title: 'Age',
dataIndex: 'age',
},
{
title: 'Address',
dataIndex: 'address',
},
],
[]
);
const rowSelection = useMemo(
() => ({
selectedRowKeys,
onChange: onSelectChange,
}),
[selectedRowKeys, onSelectChange]
);
return (
<Modal visible={visible} onCancel={onCancel}>
<Table dataSource={data} columns={columns} rowSelection={rowSelection} />
</Modal>
);
};
export default DemoTable;
```
在这个示例中,我们使用了useState()来管理选中的行的状态,useMemo()来缓存columns和rowSelection,useCallback()来缓存onSelectChange函数。这些优化可以避免不必要的组件重新渲染,从而解决了闪烁的问题。
希望这个示例能够帮助你解决问题。如果你还有其他问题,欢迎随时问我。
阅读全文