当前位置: 首页 > news >正文

Ant Design:企业级 UI 设计语言与 React 组件库

Ant Design

项目描述

Ant Design 是一套企业级的 UI 设计语言和 React 组件库,致力于提供高质量的设计规范和丰富的组件资源。该项目基于 TypeScript 开发,提供完整的类型定义,支持 React 16 到 19 版本,具有出色的国际化能力和可定制化主题功能。

功能特性

  • 丰富的组件库:提供超过 60 个高质量 React 组件,涵盖布局、导航、数据录入、数据展示、反馈等各类场景
  • TypeScript 支持:完整的 TypeScript 类型定义,提供优秀的开发体验
  • 国际化解决方案:内置多语言支持,轻松实现国际化需求
  • 可定制主题:支持 CSS 变量和设计令牌,方便进行主题定制
  • 企业级设计规范:遵循 Ant Design 设计语言,保证设计的一致性和专业性
  • 跨平台兼容:支持服务端渲染,兼容现代浏览器
  • 开发工具完善:提供完整的开发、构建、测试工具链

安装指南

环境要求

  • Node.js 版本 >= 16
  • React 16 ~ 19
  • 现代浏览器支持(Chrome 80+)

安装依赖

# 使用 npm 安装
npm install antd# 使用 yarn 安装
yarn add antd# 使用 pnpm 安装
pnpm add antd# 使用 Bun 安装
bun add antd

开发环境设置

# 克隆项目
git clone https://github.com/ant-design/ant-design.git# 安装依赖
npm install# 启动开发服务器
npm start# 运行测试
npm test# 构建项目
npm run build

使用说明

基础使用

import React from 'react';
import { Button, DatePicker } from 'antd';const App = () => (<><Button type="primary">主要按钮</Button><DatePicker /></>
);export default App;

国际化配置

import React from 'react';
import { ConfigProvider } from 'antd';
import zhCN from 'antd/locale/zh_CN';const App = () => (<ConfigProvider locale={zhCN}><YourApp /></ConfigProvider>
);

主题定制

import React from 'react';
import { ConfigProvider } from 'antd';const theme = {token: {colorPrimary: '#00b96b',},
};const App = () => (<ConfigProvider theme={theme}><YourApp /></ConfigProvider>
);

核心代码

组件样式管理

// components/style/index.ts
function pascalCase(name) {return name.charAt(0).toUpperCase() + name.slice(1).replace(/-(\w)/g, (m, n) => n.toUpperCase());
}// 自动导入组件样式
const req = require.context('./components', true, /^\.\/[^_][\w-]+\/style\/index\.tsx?$/);req.keys().forEach((mod) => {let v = req(mod);if (v?.default) {v = v.default;}const match = mod.match(/^\.\/([^_][\w-]+)\/index\.tsx?$/);if (match?.[1]) {if (match[1] === 'message' || match[1] === 'notification') {exports[match[1]] = v;} else {exports[pascalCase(match[1])] = v;}}
});

构建配置

// scripts/dist.config.js
function addLocales(config) {const newConfig = { ...config };let packageName = 'antd-with-locales';if (newConfig.entry['antd.min']) {packageName += '.min';}newConfig.entry[packageName] = './index-with-locales.js';newConfig.output.filename = '[name].js';return newConfig;
}function externalDayjs(config) {const newConfig = { ...config };newConfig.externals.dayjs = {root: 'dayjs',commonjs2: 'dayjs',commonjs: 'dayjs',amd: 'dayjs',};return newConfig;
}

图标系统

// site/theme/common/IconSearch/index.tsx
import React, { useCallback, useMemo, useState } from 'react';
import Icon, * as AntdIcons from '@ant-design/icons';export enum ThemeType {Filled = 'Filled',Outlined = 'Outlined',TwoTone = 'TwoTone',
}const IconSearch: React.FC = () => {const [displayState, setDisplayState] = useState({searchKey: '',theme: ThemeType.Outlined,});const handleSearchIcon = debounce((e: React.ChangeEvent<HTMLInputElement>) => {setDisplayState(prevState => ({ ...prevState, searchKey: e.target.value }));}, 300);const handleChangeTheme = useCallback((value: ThemeType) => {setDisplayState(prevState => ({ ...prevState, theme: value }));}, []);return (<div>{/* 图标搜索和展示逻辑 */}</div>);
};

演示组件包装器

// site/theme/common/DemoWrapper.tsx
import React, { Suspense } from 'react';
import { DumiDemo, DumiDemoGrid } from 'dumi';const DemoWrapper: typeof DumiDemoGrid = ({ items }) => {const { showDebug, setShowDebug } = React.useContext(DemoContext);const [expandAll, setExpandAll] = useLayoutState(false);const [enableCssVar, setEnableCssVar] = useLayoutState(true);const demos = React.useMemo(() =>items.reduce((acc, item) => {const { debug } = item.previewerProps;if (debug && !showDebug) return acc;return acc.concat({...item,previewerProps: {...item.previewerProps,expand: expandAll,debug: false,originDebug: debug,},});}, []),[expandAll, showDebug]);return (<div className="demo-wrapper"><ConfigProvider theme={{ cssVar: enableCssVar, hashed: !enableCssVar }}><DumiDemoGriditems={demos}demoRender={(item) => (<Suspense key={item.demo.id} fallback={<DemoFallback />}><DumiDemo {...item} /></Suspense>)}/></ConfigProvider></div>);
};

主题切换动画

// site/theme/common/hooks/useThemeAnimation.ts
const useThemeAnimation = () => {const {token: { colorBgElevated },} = theme.useToken();const toggleAnimationTheme = (event: React.MouseEvent<HTMLElement>, isDark: boolean) => {if (!(event && typeof document.startViewTransition === 'function')) return;const x = event.clientX;const y = event.clientY;const endRadius = Math.hypot(Math.max(x, innerWidth - x), Math.max(y, innerHeight - y));document.startViewTransition(async () => {// 等待主题变更完成while (colorBgElevated === animateRef.current.colorBgElevated) {await new Promise<void>(resolve => setTimeout(resolve, 1000 / 60));}const root = document.documentElement;root.classList.remove(isDark ? 'dark' : 'light');root.classList.add(isDark ? 'light' : 'dark');});};return toggleAnimationTheme;
};

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

http://www.hskmm.com/?act=detail&tid=33698

相关文章:

  • 2025 年最新推荐钢套钢保温钢管源头厂家榜:聚焦品质与实力,精选优质厂家助力采购决策
  • 2025年10月市场地位认证机构推荐榜:尚普与华信人深度对比评测
  • 2025年10月智能体公司推荐榜单:五强对比与中立评测助您精准选型
  • XPath索引定位深度解析://X[n]与(//X)[n]的本质区别
  • 2025年10月波形护栏厂家推荐榜单:基于公开数据的中立对比与选购参考
  • 优化电商包装的机器学习模型解析
  • Index of /python/
  • 2025年10月项目管理工具推荐榜:十款主流平台深度对比与选购指南
  • 2025年10月项目管理工具推荐榜单:基于真实数据的中立对比与选购指南
  • GRPO
  • 2025年10月项目管理工具推荐榜:覆盖敏捷瀑布混合模式的中立评析与避坑要点
  • QQ音乐v19.51下载
  • 2025年10月止痒控油洗发水推荐榜:十款热门单品多维对比与中性选购指南
  • 2025年10月止痒控油洗发水推荐榜单:十款热门单品深度对比与中立评测
  • 关于小程序开发的事(需要找团队开发的,请看)
  • 2025年10月止痒控油洗发水评测推荐:聚焦头皮屏障修复与临床验证的排名解析
  • 2025年10月激光切割机品牌推荐榜:五强对比评测与选购决策指南
  • 2025年10月激光切割机品牌推荐排名:以透明数据为基础的实用选择指南
  • contour
  • 2025年10月石墨电极厂家推荐排名:晶碳科技产品矩阵与合规资质透视
  • 2025年10月领先品牌认证机构推荐榜:尚普与华信人深度对比评测
  • 2025年10月领先品牌认证机构推荐榜:聚焦尚普与华信人的权威数据与落地价值
  • 做题笔记20
  • 博客园地址
  • RM500U-EA
  • 重磅!JBoltAI 框架:Java 企业级 AI 应用开发首选,终身授权 + 专属 VIP 服务
  • 242. 有效的字母异位词
  • 2025年10月槲皮素产品推荐榜:五款热门单品深度对比与中立评测
  • 面试算法题
  • 芯片集成