Компонент Description является мощным инструментом для структурированного отображения информации в виде списка пар «ключ — значение». Он используется для презентации свойств объектов, параметров или метаданных и обеспечивает аккуратное оформление с гибкой кастомизацией внешнего вида и поведения.
Для начала компонент импортируется из библиотеки Naive UI:
import { NDescriptions, NDescriptionsItem } from 'naive-ui';
Базовый синтаксис представляет собой контейнер
NDescriptions и вложенные элементы
NDescriptionsItem:
<NDescriptions title="Профиль пользователя">
<NDescriptionsItem label="Имя">Иван Иванов</NDescriptionsItem>
<NDescriptionsItem label="Возраст">30</NDescriptionsItem>
<NDescriptionsItem label="Email">ivan@example.com</NDescriptionsItem>
</NDescriptions>
Пояснения:
title — заголовок всей секции описания.label — отображаемый ключ для каждой записи.NDescriptionsItem — значение,
соответствующее ключу.| Свойство | Тип | Описание | ||
|---|---|---|---|---|
title |
string |
Заголовок описания. | ||
column |
number |
Количество колонок для распределения элементов. По умолчанию —
3. |
||
bordered |
boolean |
Отображение границ таблицы описаний. | ||
labelPlacement |
'top' | 'left' |
Расположение текста ключа: сверху или слева. | ||
size |
'small' | 'medium' | 'large' |
Размер шрифта и отступов. | ||
labelStyle |
CSSProperties |
Кастомный стиль для ключей. | ||
contentStyle |
CSSProperties |
Кастомный стиль для значений. |
Пример с колонками и границами:
<NDescriptions title="Информация о продукте" column={2} bordered>
<NDescriptionsItem label="Название">Ноутбук</NDescriptionsItem>
<NDescriptionsItem label="Модель">XPS 15</NDescriptionsItem>
<NDescriptionsItem label="Процессор">Intel i7</NDescriptionsItem>
<NDescriptionsItem label="ОЗУ">16 GB</NDescriptionsItem>
</NDescriptions>
Компонент поддерживает вложенные структуры и кастомные рендер-функции, позволяя отображать сложные данные:
<NDescriptions title="Заказ" column={1}>
<NDescriptionsItem label="Клиент">
<div>
<strong>Имя:</strong> Алексей<br />
<strong>Телефон:</strong> +7 999 123-45-67
</div>
</NDescriptionsItem>
<NDescriptionsItem label="Продукты">
<ul>
<li>Монитор 27"</li>
<li>Клавиатура механическая</li>
</ul>
</NDescriptionsItem>
</NDescriptions>
Компонент NDescriptionsItem поддерживает слоты, что позволяет динамически изменять содержимое или добавлять интерактивные элементы:
<NDescriptions title="Профиль" column={2}>
<NDescriptionsItem label="Имя">
{{
default: () => <strong>Екатерина</strong>
}}
</NDescriptionsItem>
<NDescriptionsItem label="Действия">
{{
default: () => <button onCl ick={() => alert('Редактирование')}>Редактировать</button>
}}
</NDescriptionsItem>
</NDescriptions>
Для более тонкой настройки внешнего вида используются свойства
labelStyle и contentStyle:
<NDescriptions title="Данные" column={2}>
<NDescriptionsItem
label="Имя"
labelStyle={{ color: 'blue', fontWeight: 'bold' }}
contentStyle={{ color: 'darkgreen' }}
>
Сергей
</NDescriptionsItem>
<NDescriptionsItem label="Роль" contentStyle={{ fontStyle: 'italic' }}>
Администратор
</NDescriptionsItem>
</NDescriptions>
Свойство column позволяет гибко управлять макетом:
column={1} — каждая пара ключ-значение в отдельной
строке.column={2} — две пары на одной строке.column={3} — стандартное трёхколоночное
отображение.Если контент не помещается, Naive UI автоматически переносит элементы, сохраняя читаемость.
Свойство size влияет на визуальную плотность:
small — компактные отступы, меньший шрифт.medium — стандартный размер (по умолчанию).large — увеличенные отступы и шрифт, подходит для
презентационных панелей.<NDescriptions title="Параметры" size="small" column={2}>
<NDescriptionsItem label="Цвет">Красный</NDescriptionsItem>
<NDescriptionsItem label="Вес">1.2 кг</NDescriptionsItem>
</NDescriptions>
Свойство bordered добавляет рамки вокруг каждой пары
ключ-значение, создавая табличное оформление. Используется для отчетов,
технической документации или административных панелей.
<NDescriptions title="Системная информация" bordered>
<NDescriptionsItem label="OS">Windows 11</NDescriptionsItem>
<NDescriptionsItem label="Версия">22H2</NDescriptionsItem>
<NDescriptionsItem label="Процессор">Intel Core i5</NDescriptionsItem>
</NDescriptions>
NDescriptions отлично подходит для работы с динамическими данными:
const userData = [
{ label: 'Имя', value: 'Анна' },
{ label: 'Возраст', value: 28 },
{ label: 'Email', value: 'anna@example.com' }
];
<NDescriptions title="Пользователь" column={2}>
{userData.map(item => (
<NDescriptionsItem label={item.label}>{item.value}</NDescriptionsItem>
))}
</NDescriptions>
Такой подход облегчает интеграцию с API и динамическими источниками данных.
Компонент Description в Naive UI сочетает:
Он идеально подходит для интерфейсов, где требуется четкая и аккуратная презентация информации в виде ключ-значение.