Ant Design предоставляет гибкий механизм работы с иконками через
компонент Icon и библиотеку @ant-design/icons.
Помимо встроенных иконок, есть возможность создавать собственные наборы,
чтобы интегрировать уникальные SVG-графики, соответствующие стилю
приложения.
Для начала необходимо установить пакет:
npm install @ant-design/icons
После установки стандартные иконки импортируются напрямую:
import { HomeOutlined, UserOutlined } from '@ant-design/icons';
<HomeOutlined style={{ fontSize: '24px', color: '#1890ff' }} />
<UserOutlined />
Ключевые моменты:
style или оборачивать
их в span/div с классами.Для интеграции собственной иконки используется компонент
createFromIconfontCN или оборачивание SVG в
React-компонент. На практике предпочтительно второй способ для полного
контроля.
import React from 'react';
import { Icon } from '@ant-design/icons';
const MyCustomSvg = () => (
<svg width="1em" height="1em" viewBox="0 0 1024 1024" fill="currentColor">
<path d="M512 0C229.234 0 0 229.234 0 512s229.234 512 512 512 512-229.234 512-512S794.766 0 512 0zM512 960C264.576 960 64 759.424 64 512S264.576 64 512 64s448 200.576 448 448-200.576 448-448 448z" />
</svg>
);
const MyCustomIcon = (props) => <Icon component={MyCustomSvg} {...props} />;
<MyCustomIcon style={{ fontSize: '32px', color: 'red' }} />
Особенности:
Icon с пропом component принимает
React-компонент, возвращающий SVG.1em для ширины
и высоты, currentColor для цвета.style.Чтобы управлять большим количеством иконок, создают отдельный модуль:
// icons.js
import { Icon } from '@ant-design/icons';
import React from 'react';
const SvgHome = () => (
<svg viewBox="0 0 1024 1024" fill="currentColor">
<path d="M512 64L64 512h128v384h256V640h128v256h256V512h128z" />
</svg>
);
const SvgUser = () => (
<svg viewBox="0 0 1024 1024" fill="currentColor">
<path d="M512 512a256 256 0 1 0 0-512 256 256 0 0 0 0 512zm0 64c-141.376 0-512 70.144-512 211.2V960h1024v-172.8C1024 646.144 653.376 576 512 576z" />
</svg>
);
export const CustomIcons = {
Home: (props) => <Icon component={SvgHome} {...props} />,
User: (props) => <Icon component={SvgUser} {...props} />,
};
Использование:
import { CustomIcons } from './icons';
<CustomIcons.Home style={{ fontSize: '40px', color: '#52c41a' }} />
<CustomIcons.User style={{ fontSize: '40px', color: '#faad14' }} />
Преимущества:
Если требуется загрузка большого количества иконок через
онлайн-шрифты, используется createFromIconfontCN:
import { createFromIconfontCN } from '@ant-design/icons';
const IconFont = createFromIconfontCN({
scriptUrl: '//at.alicdn.com/t/font_1234567_abcd.js',
});
<IconFont type="icon-home" style={{ fontSize: '24px', color: '#1890ff' }} />
<IconFont type="icon-user" />
Особенности подхода:
scriptUrl указывает на хостинг с иконками в формате
IconFont.1em
для ширины и высоты, чтобы иконки легко масштабировались вместе с
текстом.currentColor: позволяет
изменять цвет иконок через CSS, сохраняя гибкость темизации.Для TypeScript можно добавить типизацию:
import { IconProps } from '@ant-design/icons/lib/components/Icon';
export const CustomIcons: Record<string, (props?: IconProps) => JSX.Element> = {
Home: (props) => <Icon component={SvgHome} {...props} />,
User: (props) => <Icon component={SvgUser} {...props} />,
};
Это обеспечивает автодополнение и проверку типов при использовании собственных иконок.
Создание собственных наборов иконок в Ant Design сочетает удобство встроенных компонентов с гибкостью кастомных SVG, обеспечивая единый стиль приложения и лёгкость масштабирования визуальных элементов.