前端组件库Ant Design知识点大全(二)

简介: 教程来源 http://yvyus.cn/category/shengxiaoyunshi.html Ant Design 是一套企业级 React UI 组件库,提供按钮、栅格、表单、表格等基础组件;Ant Design Pro 则是其上层中后台解决方案,含 ProTable、ProForm、ProLayout 等高级封装,支持响应式、国际化、主题定制与性能优化,开箱即用。

四、核心组件详解

4.1 按钮组件 Button
按钮是用户交互中最基础的组件,Ant Design提供了多种按钮类型:

import { Button, Space } from 'antd';

const ButtonDemo = () => (
  <Space>
    <Button type="primary">主要按钮</Button>
    <Button>默认按钮</Button>
    <Button type="dashed">虚线按钮</Button>
    <Button type="text">文本按钮</Button>
    <Button type="link">链接按钮</Button>
    <Button danger>危险按钮</Button>
  </Space>
);

按钮尺寸:

<Space>
  <Button size="large">大按钮</Button>
  <Button>默认按钮</Button>
  <Button size="small">小按钮</Button>
</Space>

按钮状态:

<Button loading>加载中</Button>
<Button disabled>禁用状态</Button>

4.2 栅格组件 Grid
Ant Design的栅格系统基于24列设计,通过Row和Col组件组合实现响应式布局:

import { Row, Col } from 'antd';

const GridDemo = () => (
  <Row gutter={[16, 24]}>  {/* gutter设置列间距 */}
    <Col xs={24} sm={12} md={8} lg={6} xl={4}>
      响应式列
    </Col>
    <Col xs={24} sm={12} md={8} lg={6} xl={4}>
      响应式列
    </Col>
  </Row>
);

栅格属性说明:
image.png
4.3 表单组件 Form
表单是企业级应用中最常用的组件之一,Ant Design提供了强大的表单解决方案:

import { Form, Input, Button, Select, Switch } from 'antd';

const FormDemo = () => {
  const [form] = Form.useForm();

  const onFinish = (values) => {
    console.log('表单数据:', values);
  };

  return (
    <Form
      form={form}
      name="basic"
      labelCol={
  { span: 6 }}
      wrapperCol={
  { span: 18 }}
      onFinish={onFinish}
      autoComplete="off"
    >
      <Form.Item
        label="用户名"
        name="username"
        rules={[{ required: true, message: '请输入用户名' }]}
      >
        <Input placeholder="请输入用户名" />
      </Form.Item>

      <Form.Item
        label="邮箱"
        name="email"
        rules={[
          { required: true, message: '请输入邮箱' },
          { type: 'email', message: '请输入有效的邮箱地址' }
        ]}
      >
        <Input placeholder="请输入邮箱" />
      </Form.Item>

      <Form.Item
        label="角色"
        name="role"
        initialValue="user"
      >
        <Select>
          <Select.Option value="admin">管理员</Select.Option>
          <Select.Option value="user">普通用户</Select.Option>
        </Select>
      </Form.Item>

      <Form.Item
        label="启用"
        name="enabled"
        valuePropName="checked"
      >
        <Switch />
      </Form.Item>

      <Form.Item wrapperCol={
  { offset: 6, span: 18 }}>
        <Button type="primary" htmlType="submit">提交</Button>
        <Button htmlType="button" onClick={() => form.resetFields()}>重置</Button>
      </Form.Item>
    </Form>
  );
};

表单验证:Ant Design的表单组件采用Form.Item+控件的组合方式,提供了强大的数据收集、验证和状态管理能力。验证规则使用rules属性定义,支持required、type、min、max、pattern等多种内置规则。
4.4 表格组件 Table
Table是中后台系统中最常用的组件之一,支持排序、筛选、分页、展开行、树形数据等复杂功能:

import { Table, Tag, Space, Button } from 'antd';

const TableDemo = () => {
  const dataSource = [
    { key: '1', name: '张三', age: 32, address: '北京', tags: ['开发', '产品'] },
    { key: '2', name: '李四', age: 42, address: '上海', tags: ['设计'] },
    { key: '3', name: '王五', age: 28, address: '广州', tags: ['测试'] },
  ];

  const columns = [
    { title: '姓名', dataIndex: 'name', key: 'name', sorter: (a, b) => a.name.localeCompare(b.name) },
    { title: '年龄', dataIndex: 'age', key: 'age', sorter: (a, b) => a.age - b.age },
    { title: '地址', dataIndex: 'address', key: 'address', filters: [
      { text: '北京', value: '北京' },
      { text: '上海', value: '上海' },
    ], onFilter: (value, record) => record.address.indexOf(value) === 0 },
    { title: '标签', dataIndex: 'tags', key: 'tags', render: (tags) => (
      <>
        {tags?.map(tag => <Tag key={tag}>{tag}</Tag>)}
      </>
    ) },
    { title: '操作', key: 'action', render: (_, record) => (
      <Space>
        <Button type="link">编辑</Button>
        <Button type="link" danger>删除</Button>
      </Space>
    ) },
  ];

  return (
    <Table
      dataSource={dataSource}
      columns={columns}
      pagination={
  { pageSize: 10, showSizeChanger: true }}
      bordered
    />
  );
};

Table组件核心特性:

排序:通过sorter属性实现列排序

筛选:通过filters和onFilter实现数据筛选

分页:内置分页器,支持自定义每页条数
http://yvyus.cn/category/shengxiaopeidui.html
自定义渲染:通过render函数实现列内容的自定义展示

固定列:通过fixed属性固定左侧或右侧列

树形数据:通过children属性支持树形数据展示

4.5 数据录入组件
Ant Design提供了完整的数据录入组件体系:

import { Input, Select, DatePicker, Radio, Checkbox, Switch, Slider } from 'antd';

const { TextArea, Search } = Input;
const { RangePicker } = DatePicker;

const FormInputDemo = () => (
  <>
    <Input placeholder="基础输入框" />
    <Input.Password placeholder="密码输入框" />
    <TextArea rows={4} placeholder="多行文本框" />
    <Search placeholder="搜索框" onSearch={value => console.log(value)} />

    <Select placeholder="下拉选择" style={
  { width: 200 }}>
      <Select.Option value="option1">选项1</Select.Option>
      <Select.Option value="option2">选项2</Select.Option>
    </Select>

    <DatePicker placeholder="日期选择" />
    <RangePicker placeholder={['开始日期', '结束日期']} />

    <Radio.Group>
      <Radio value="a">选项A</Radio>
      <Radio value="b">选项B</Radio>
    </Radio.Group>

    <Checkbox.Group>
      <Checkbox value="apple">苹果</Checkbox>
      <Checkbox value="banana">香蕉</Checkbox>
    </Checkbox.Group>

    <Switch />
    <Slider defaultValue={30} />
  </>
);

4.6 数据展示组件

import { Card, Badge, Avatar, Tag, Progress, Collapse, Tabs } from 'antd';

const { Panel } = Collapse;

const DataDisplayDemo = () => (
  <>
    <Card title="卡片标题" extra={<a href="#">更多</a>} style={
  { width: 300 }}>
      <p>卡片内容</p>
    </Card>

    <Badge count={5}>
      <Avatar shape="square" size="large" />
    </Badge>

    <Tag color="blue">标签</Tag>
    <Tag color="success">成功</Tag>
    <Tag color="error">错误</Tag>

    <Progress percent={60} status="active" />

    <Collapse>
      <Panel header="面板1" key="1">
        <p>面板内容</p>
      </Panel>
    </Collapse>

    <Tabs defaultActiveKey="1">
      <Tabs.TabPane tab="标签1" key="1">内容1</Tabs.TabPane>
      <Tabs.TabPane tab="标签2" key="2">内容2</Tabs.TabPane>
    </Tabs>
  </>
);

4.7 反馈组件

import { Modal, message, notification, Popconfirm, Spin } from 'antd';

const FeedbackDemo = () => {
  const showModal = () => {
    Modal.confirm({
      title: '确认操作',
      content: '确定要执行此操作吗?',
      onOk: () => message.success('操作成功'),
    });
  };

  const showNotification = () => {
    notification.success({
      message: '操作成功',
      description: '您的操作已成功完成',
    });
  };

  return (
    <>
      <Button onClick={showModal}>确认弹窗</Button>
      <Button onClick={() => message.success('成功消息')}>消息提示</Button>
      <Button onClick={showNotification}>通知提醒</Button>

      <Popconfirm title="确定删除吗?" onConfirm={() => message.info('已删除')}>
        <Button danger>删除</Button>
      </Popconfirm>

      <Spin tip="加载中...">
        <div>内容区域</div>
      </Spin>
    </>
  );
};

五、Ant Design Pro

Ant Design Pro是基于Ant Design组件库构建的企业级中后台前端解决方案,内置了丰富的页面模板和高阶组件。

5.1 ProTable高级表格
ProTable是基于Table封装的增强表格组件,支持高级搜索、表格内编辑、数据缓存、自定义列等功能:

import { ProTable } from '@ant-design/pro-components';

const ProTableDemo = () => {
  const columns = [
    { title: '姓名', dataIndex: 'name', key: 'name' },
    { title: '年龄', dataIndex: 'age', key: 'age', valueType: 'digit' },
    { title: '邮箱', dataIndex: 'email', key: 'email', valueType: 'text' },
  ];

  const request = async (params) => {
    // 发起请求获取数据
    const res = await fetch(`/api/users?page=${params.current}&size=${params.pageSize}`);
    const data = await res.json();
    return { data: data.list, success: true, total: data.total };
  };

  return (
    <ProTable
      columns={columns}
      request={request}
      rowKey="id"
      search={
  { labelWidth: 'auto' }}
      pagination={
  { pageSize: 10 }}
      toolBarRender={() => [<Button type="primary">新建</Button>]}
    />
  );
};

5.2 ProForm高级表单
ProForm提供了更多表单布局、校验规则和联动逻辑,支持分步表单、弹窗表单等场景:

import { ProForm, ProFormText, ProFormSelect, ProFormDatePicker } from '@ant-design/pro-components';

const ProFormDemo = () => {
  return (
    <ProForm
      onFinish={async (values) => {
        console.log(values);
      }}
      submitter={
  {
        searchConfig: { submitText: '提交' },
      }}
    >
      <ProFormText
        name="name"
        label="姓名"
        placeholder="请输入姓名"
        rules={[{ required: true, message: '请输入姓名' }]}
      />
      <ProFormSelect
        name="gender"
        label="性别"
        options={[
          { label: '男', value: 'male' },
          { label: '女', value: 'female' },
        ]}
      />
      <ProFormDatePicker name="birthday" label="生日" />
    </ProForm>
  );
};

5.3 ProLayout布局组件
ProLayout针对中后台优化的布局组件,集成了侧边栏导航、面包屑、用户信息等常见元素:

import { ProLayout } from '@ant-design/pro-components';

const ProLayoutDemo = () => {
  return (
    <ProLayout
      title="Ant Design Pro"
      logo="https://ant.design/logo.svg"
      menuItemRender={(item, dom) => <a href={item.path}>{dom}</a>}
      menuDataRender={() => [
        { path: '/dashboard', name: '仪表盘', icon: 'dashboard' },
        { path: '/user', name: '用户管理', icon: 'user' },
      ]}
    >
      {/* 页面内容 */}
    </ProLayout>
  );
};

六、性能优化

6.1 按需加载
Ant Design 5.0本身支持Tree Shaking,组件和样式都可以按需引入。但为了进一步优化,可以配合路由懒加载:

import { lazy, Suspense } from 'react';

const UserList = lazy(() => import('./pages/UserList'));
const OrderList = lazy(() => import('./pages/OrderList'));

const App = () => (
  <Suspense fallback={<Spin />}>
    <Routes>
      <Route path="/users" element={<UserList />} />
      <Route path="/orders" element={<OrderList />} />
    </Routes>
  </Suspense>
);

6.2 大表格优化
对于超大数据量场景,可以使用虚拟滚动技术:

import { Table } from 'antd';

<Table
  dataSource={largeData}
  columns={columns}
  scroll={
  { y: 400, x: 1500 }}
  pagination={false}
  virtual
/>

6.3 组件懒加载
对于非首屏组件,可以使用动态导入:

import { lazy } from 'react';

const HeavyChart = lazy(() => import('./HeavyChart'));

const Dashboard = () => (
  <Suspense fallback={<Spin />}>
    <HeavyChart />
  </Suspense>
);

七、最佳实践

7.1 设计规范一致性
使用Ant Design的最大优势之一是可以快速建立统一的视觉体系。建议遵循原有设计规范,不要随意修改组件样式,尤其是颜色、间距、字体等核心参数。

7.2 国际化支持
Ant Design内置了多语言支持:

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

<ConfigProvider locale={zhCN}>
  <App />
</ConfigProvider>

7.3 按需定制主题
推荐使用ConfigProvider的theme属性进行主题定制,而不是直接覆盖CSS变量。这种方式更易于维护和升级。

7.4 使用TypeScript
Ant Design深度集成TypeScript,强烈建议在项目中使用TypeScript以获得完整的类型提示和校验。
来源:
http://yvyus.cn/

相关文章
|
22天前
|
前端开发 JavaScript 算法
前端组件库Ant Design知识点大全(一)
教程来源 https://zlpow.cn/category/software-apps.html Ant Design是蚂蚁集团开源的企业级UI设计语言与React组件库,GitHub星标超9万。其5.x版支持TypeScript、按需加载、动态主题定制及Design Token体系,广泛应用于金融、政务等中后台系统,助力高效构建高质量企业应用。
|
26天前
|
机器学习/深度学习 搜索推荐 算法
Java+AI实战:从零构建智能推荐系统(二)
教程来源 https://tmywi.cn/category/jiaju.html 本节详解推荐系统核心模块:第三部分“召回算法”涵盖协同过滤(ItemCF)、向量召回(Embedding+ANN)及多路融合策略;第四部分“排序模型”介绍DeepFM——融合FM低阶交叉与DNN高阶特征的CTR预估模型,兼顾可解释性与表达能力。
|
26天前
|
机器学习/深度学习 缓存 搜索推荐
Java+AI实战:从零构建智能推荐系统(一)
教程来源 https://tmywi.cn/category/jiankang.html 本文详解如何用Java从零构建生产级智能推荐系统SmartRec,覆盖数据采集、特征工程、多路召回、深度排序、重排及A/B测试全链路。聚焦高并发、实时性与可扩展性,助你掌握AI落地核心能力。
lyL
|
5月前
|
存储 安全 Java
One Trick Per Day
初始化Map时应避免直接指定容量,建议使用Guava的`newHashMapWithExpectedSize`或手动计算容量。禁止使用Executors创建线程池,以防OOM,推荐通过ThreadPoolExecutor或Guava方式构建。Arrays.asList返回的列表不可修改,遍历Map优先使用entrySet或forEach。SimpleDateFormat非线程安全,不应定义为static,可使用ThreadLocal或Java 8新时间API替代。
lyL
271 3
One Trick Per Day
|
19天前
|
IDE Java Maven
Maven 本地仓库替代私仓配置指南
本文记录了因公司Nexus私仓下线导致Maven依赖失效的应急解决方案:包括修改settings.xml全局配置本地仓库、利用mirror机制重定向请求等实用技巧,兼顾团队协作与项目兼容性,是开发人员应对“历史遗留”依赖问题的实战指南。(239字)
191 1
Maven 本地仓库替代私仓配置指南
|
12天前
|
编解码 数据可视化 前端开发
前端组件库——DataV知识点大全(二)
教程来源 https://www.xbivx.cn DataV提供40+高质量组件,涵盖边框(13种SVG动画边框)、装饰、数字翻牌器、滚动表格、水位图、锥形柱图、飞线图及全屏容器等,支持高度自定义与响应式适配,助力快速构建专业数据大屏。
|
12天前
|
资源调度 数据可视化 前端开发
前端组件库——DataV知识点大全(一)
教程来源 https://www.wkmsa.cn DataV是专注大屏可视化的开源Vue组件库,提供丰富SVG边框、装饰与图表组件,助力快速构建震撼数据看板。基于Vue3+TS重构,支持主题定制与按需引入;3.0版将集成WebGPU,性能提升47%。开箱即用,大幅降低开发门槛。
|
13天前
|
移动开发 自然语言处理 小程序
前端组件库——Wot Design Uni知识点大全(三)
教程来源 https://rvtst.cn Wot Design Uni 是基于 Vue3 的跨平台 UI 组件库,支持微信/支付宝小程序、H5、App 等多端兼容;提供样式隔离修复、virtualHost 渲染优化、虚拟列表、按需引入、国际化(15+语言)等完整解决方案。
|
13天前
|
移动开发 JavaScript 前端开发
前端组件库——Wot Design Uni知识点大全(一)
教程来源 https://zlpow.cn Wot Design Uni 是基于 Vue3 + TypeScript 的开源 uni-app UI 组件库,提供 70+ 高质量移动端组件,支持微信/支付宝小程序、H5、App 等多端兼容,内置暗黑模式、国际化(15+语言)与 CSS 变量主题定制,大幅提升跨平台开发效率。
|
16天前
|
人工智能 前端开发 JavaScript
前端组件库——shadcn/ui知识点大全(三)
教程来源 http://lemci.cn/ shadcn/ui通过Tree Shaking、动态导入、Tailwind JIT等实现极致性能优化,Bundle仅增20–50KB;组件即代码,完全可控、可定制、易维护,契合Next.js+Tailwind现代栈与AI协作开发。