В разработке с использованием Ant Design (AntD) переиспользование компонентов является ключевым подходом для повышения эффективности, консистентности интерфейсов и уменьшения дублирования кода. AntD предоставляет богатый набор компонентов, которые можно адаптировать и комбинировать, создавая собственные абстракции.
Любой компонент AntD можно обернуть в собственный, создавая повторно используемую обертку с предустановленными свойствами. Например, часто используются кастомные кнопки:
import { Button } from 'antd';
const PrimaryButton = ({ children, ...props }) => (
<Button type="primary" {...props}>
{children}
</Button>
);
export default PrimaryButton;
Такой подход позволяет:
Формы в AntD состоят из элементов Form.Item и полей
ввода (Input, Select, DatePicker
и др.). Часто встречаются повторяющиеся шаблоны валидации и оформления.
Создание оберток упрощает код и обеспечивает консистентность:
import { Form, Input } from 'antd';
const TextField = ({ name, label, rules, ...props }) => (
<Form.Item
name={name}
label={label}
rules={rules}
>
<Input {...props} />
</Form.Item>
);
export default TextField;
Применение такого подхода позволяет:
Ant Design поддерживает композицию: один компонент может содержать другие, передавая им свойства. Например, создание таблицы с кастомным рендером колонок:
import { Table, Button } from 'antd';
const ActionTable = ({ columns, data, onEdit, onDelete }) => {
const enhancedColumns = [
...columns,
{
title: 'Действия',
key: 'actions',
render: (_, record) => (
<>
<Button type="link" onCl ick={() => onEdit(record)}>Редактировать</Button>
<Button type="link" danger onCl ick={() => onDelete(record)}>Удалить</Button>
</>
),
},
];
return <Table columns={enhancedColumns} dataSource={data} />;
};
export default ActionTable;
Преимущества композиции:
Ant Design поддерживает настройку темы и глобальные
конфигурации через ConfigProvider. Можно задавать единые
параметры для всего приложения или конкретного модуля:
import { ConfigProvider, Button } from 'antd';
const AppConfig = ({ children }) => (
<ConfigProvider
theme={{
token: {
colorPrimary: '#1DA57A',
borderRadius: 8,
},
}}
>
{children}
</ConfigProvider>
);
export default AppConfig;
Преимущества глобальной конфигурации:
Переиспользование в AntD не ограничивается визуальными компонентами. Часто создаются кастомные хуки, которые инкапсулируют логику взаимодействия с компонентами:
import { useState } from 'react';
import { Modal } from 'antd';
const useModal = () => {
const [visible, setVisible] = useState(false);
const open = () => setVisible(true);
const close = () => setVisible(false);
const ModalWrapper = ({ children, ...props }) => (
<Modal visible={visible} onCan cel={close} {...props}>
{children}
</Modal>
);
return { open, close, ModalWrapper };
};
export default useModal;
Такой подход позволяет:
Для повторного применения логики также можно использовать HOC, оборачивая стандартные компоненты AntD:
import { Spin } from 'antd';
const withLoading = (WrappedComponent) => ({ loading, ...props }) => (
<Spin spinning={loading}>
<WrappedComponent {...props} />
</Spin>
);
export default withLoading;
HOC предоставляет:
Эти подходы позволяют строить масштабируемые интерфейсы на Ant Design, где каждый компонент легко адаптируется под новые требования, сокращая объем повторяющегося кода и поддерживая единый дизайн системы.