1. ‌表单联动监听:Form.useWatch‌


场景‌:动态表单字段联动时,避免手动监听onValuesChange事件。

代码‌:

const [form] = Form.useForm();
const username = Form.useWatch('username', form);

<Form form={form}>
  <Form.Item name="username">
    <Input />
  </Form.Item>
  {/* 根据username动态显示内容 */}
  {username && <div>Hello {username}!</div>}
</Form>

效果‌:直接通过Form.useWatch获取字段值,无需手动订阅表单变化。

2. ‌表格性能优化:虚拟滚动‌

场景‌:渲染超长列表(如1000+行数据)时避免页面卡顿。

代码‌:使用react-virtualized或rc-table内置方案(antd 5.x+):

<Table
  dataSource={data}
  columns={columns}
  scroll={{ y: 400 }} // 固定高度触发虚拟滚动
  virtual
  rowKey="id"
/>

效果‌:仅渲染可视区域内的行,大幅提升性能。

3. ‌动态主题切换‌

场景‌:实现用户自定义主题色(antd 5.x+)。

代码‌:通过ConfigProvider动态修改CSS变量:

import { ConfigProvider } from 'antd';

// 动态修改主题色
const changeTheme = (color) => {
  ConfigProvider.config({
    theme: { primaryColor: color },
  });
};

// 使用
<ConfigProvider>
  <App />
</ConfigProvider>

效果‌:无需重新编译,实时切换主题色。

4. ‌Modal方法式调用‌

场景‌:避免手动维护visible状态。

代码‌:直接通过静态方法调用Modal:

const showModal = () => {
  Modal.confirm({
    title: '确认操作',
    content: '确定要删除此项吗?',
    onOk: () => handleDelete(),
  });
};

优点‌:精简状态管理代码,逻辑更集中。

5. ‌上传组件自定义验证‌

场景‌:限制文件类型/大小。

代码‌:通过beforeUpload拦截非合规文件:

<Upload
  beforeUpload={(file) => {
    const isImage = file.type.startsWith('image/');
    if (!isImage) {
      message.error('仅支持图片文件!');
      return Upload.LIST_IGNORE;
    }
    return true;
  }}
>
  <Button>上传图片</Button>
</Upload>

效果‌:前端拦截无效文件提交。

6. ‌全局配置国际化‌

场景‌:多语言项目快速切换。

代码‌:通过ConfigProvider统一配置:

import { ConfigProvider } from 'antd';
import zhCN from 'antd/locale/zh_CN';
import enUS from 'antd/locale/en_US';

<ConfigProvider locale={currentLang === 'zh' ? zhCN : enUS}>
  <App />
</ConfigProvider>

扩展‌:配合moment.js或dayjs实现日期国际化。

7. ‌封装自定义Hooks‌

场景‌:复用Table分页逻辑。

代码‌:

const usePagination = (initialPage = 1, pageSize = 10) => {
  const [pagination, setPagination] = useState({ current: initialPage, pageSize });

  const handleTableChange = (pag) => {
    setPagination(pag);
    fetchData(pag.current, pag.pageSize);
  };

  return { pagination, handleTableChange };
};

// 使用
const { pagination, handleTableChange } = usePagination();
<Table onChange={handleTableChange} pagination={pagination} />;

8. ‌Tooltip防抖处理‌

场景‌:高频触发的提示组件优化性能。

代码‌:结合lodash/debounce:

import { debounce } from 'lodash';

const DebouncedTooltip = ({ title, children }) => {
  const [visible, setVisible] = useState(false);
  
  const handleMouseEnter = debounce(() => setVisible(true), 300);
  const handleMouseLeave = debounce(() => setVisible(false), 300);

  return (
    <Tooltip title={title} open={visible}>
      <div onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave}>
        {children}
      </div>
    </Tooltip>
  );
};

‌总结建议‌

‌* 升级antd 5.x‌:充分利用CSS变量、组件性能优化等新特性。
‌* 善用ProComponents‌:复杂场景(如ProTable、ProForm)可节省80%代码量。
‌* 按需加载‌:通过babel-plugin-import减少打包体积。

掌握这些小技巧,可显著提升antd开发效率与代码可维护性。


忧郁的双杠
1 声望0 粉丝