antd(Ant Design)是 React 生态最流行的 UI 组件库。要深入掌握 antd,仅熟悉参数是不够的,必须深入到源码层面。
本节将介绍如何调试 antd 组件的源码。
npm create vite@latest antd-debug -- --template react
cd antd-debug
npm install
npm install antdantd v5 的组件都是函数组件,React 源码中 renderWithHooks 是调用函数组件的地方。可以在该处添加条件断点,在特定组件被调用时断住:
react-dom.jsrenderWithHooksComponent.displayName?.includes('Button') || Component.name?.includes('Button')这样当 Button 组件被调用时就会断住,随后 step into 即可进入组件内部。
2024-2026 更新:antd v5 的 ES 产物是未压缩、可读性好的编译代码(npm 包内未附带 sourcemap),可以直接在 Chrome DevTools 的 Sources 面板中搜索到组件源码。
Cmd+P(macOS)或 Ctrl+P(Windows)打开文件搜索button 或 Button,找到 antd 的 Button 组件源码2024-2026 更新:使用 React DevTools 的 "Inspect" 功能可以直接定位到组件源码:
关键源码位置:
| 你想了解的 | 文件路径 |
|---|---|
| Button 组件实现 | antd/es/button/button.tsx |
| Design Token 计算 | antd/es/theme/ |
| CSS-in-JS 样式 | @ant-design/cssinjs |
| Form 表单逻辑 | antd/es/form/ + rc-field-form |
| Table 表格逻辑 | antd/es/table/ + rc-table |
2025-2026 新增:Ant Design 6.0(2025 年下半年发布)已原生支持 React 19,不再需要
@ant-design/v5-patch-for-react-19补丁。调试 v6 源码时注意以下变化:
react-dom 的源码结构(如 renderWithHooks)保持不变,原有断点方式仍适用。node_modules/antd/es/ 中搜索 deprecate 相关逻辑,观察弃用告警的触发条件:// v6 常见弃用示例(部分)
<Modal bodyStyle={{...}} /> // → styles={{ body: {...} }}
<Table size="middle" /> // → size="medium"(统一 large/medium/small)
<Menu>{children}</Menu> // → items 数据化配置
<Tooltip overlayStyle={{...}} /> // → styles={{ root: {...} }}
<Select dropdownRender={...} /> // → popupRendersize 枚举统一:v6 统一为 'large' | 'medium' | 'small',default/middle 取值已废弃,调试组件尺寸相关逻辑时可在 size 相关 hook 处断点观察。2024-2026 更新:antd v6 有几项重大变化,可以通过调试来理解。
antd v5 使用 @ant-design/cssinjs 实现 CSS-in-JS,调试样式生成逻辑:
@ant-design/cssinjs 的 useStyleRegister 函数中打断点import { ConfigProvider } from 'antd';
function App() {
return (
<ConfigProvider
theme={{
token: {
colorPrimary: '#1890ff',
borderRadius: 4,
},
}}
>
<Button type="primary">Button</Button>
</ConfigProvider>
);
}在 @ant-design/cssinjs 的 Theme 类的 getDerivativeToken 方法中打断点,可以观察 Design Token 的计算过程。
在 Chrome DevTools 中打的断点,在 VSCode Debugger 中同样会断住(通过 js-debug)。