Компонент n-list из библиотеки Naive UI
предназначен для отображения упорядоченных или неупорядоченных списков
элементов с возможностью кастомизации внешнего вида, интерактивности и
структуры. Он поддерживает как простые текстовые элементы, так и сложные
кастомные слоты для каждого элемента списка.
Для использования List необходимо импортировать компоненты
NList и NListItem из библиотеки:
import { NList, NListItem } from 'naive-ui'
Базовая структура списка выглядит так:
<template>
<n-list>
<n-list-item>Элемент 1</n-list-item>
<n-list-item>Элемент 2</n-list-item>
<n-list-item>Элемент 3</n-list-item>
</n-list>
</template>
Здесь каждый n-list-item является
дочерним элементом списка. Важно: n-list
сам по себе не рендерит HTML-список <ul> или
<ol>, это абстрактный контейнер для элементов списка,
стилизованный в соответствии с темой Naive UI.
Для динамического создания элементов списка удобно использовать
директиву v-for:
<template>
<n-list>
<n-list-item v-for="item in items" :key="item.id">
{{ item.text }}
</n-list-item>
</n-list>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, text: 'Элемент 1' },
{ id: 2, text: 'Элемент 2' },
{ id: 3, text: 'Элемент 3' }
]
}
}
}
</script>
Преимущества такого подхода: поддержка реактивности Vue, возможность добавления, удаления и фильтрации элементов без переписывания разметки.
Каждый элемент списка может содержать кастомные слоты. Это особенно полезно, если требуется добавить кнопки, иконки или сложные карточки внутри элемента:
<n-list>
<n-list-item v-for="user in users" :key="user.id">
<template #prefix>
<img :src="user.avatar" class="avatar" />
</template>
<span>{{ user.name }}</span>
<template #suffix>
<n-button size="tiny" @click="sendMessage(user)">Сообщение</n-button>
</template>
</n-list-item>
</n-list>
prefix — слот для контента перед
основным текстом элемента.suffix — слот для контента после
основного текста.Такой подход позволяет создавать гибкие интерфейсы с минимальным количеством кода и поддержкой всех стандартных функций Vue.
Компонент n-list-item поддерживает активное состояние с
помощью свойства clickable и события
click:
<n-list>
<n-list-item
v-for="item in items"
:key="item.id"
clickable
@click="handleClick(item)"
>
{{ item.text }}
</n-list-item>
</n-list>
При клике на элемент можно выполнять любые действия: навигацию, открытие модальных окон, изменение состояния родительского компонента.
Для визуального выделения текущего выбранного элемента удобно использовать реактивную переменную:
<n-list>
<n-list-item
v-for="item in items"
:key="item.id"
:class="{ active: selectedItem === item.id }"
clickable
@click="selectedItem = item.id"
>
{{ item.text }}
</n-list-item>
</n-list>
<style>
.active {
background-color: var(--n-color-primary-light);
}
</style>
С помощью свойства bordered список может отображать
элементы с разделительными линиями:
<n-list bordered>
<n-list-item>Элемент A</n-list-item>
<n-list-item>Элемент B</n-list-item>
</n-list>
Для логической группировки элементов используется компонент
n-list-group:
<n-list>
<n-list-group title="Группа 1">
<n-list-item>Элемент 1</n-list-item>
<n-list-item>Элемент 2</n-list-item>
</n-list-group>
<n-list-group title="Группа 2">
<n-list-item>Элемент 3</n-list-item>
<n-list-item>Элемент 4</n-list-item>
</n-list-group>
</n-list>
Группы могут быть свернутыми по умолчанию, если использовать свойство
collapsible.
Для больших наборов данных рекомендуется использовать виртуализацию с
n-virtual-list, совместимым с n-list. Это
значительно повышает производительность и снижает нагрузку на DOM:
<n-virtual-list :items="largeList" :item-size="40">
<template #default="{ item }">
<n-list-item>{{ item.text }}</n-list-item>
</template>
</n-virtual-list>
Все элементы n-list и n-list-item
поддерживают темы Naive UI. Можно кастомизировать цвет фона, шрифт,
отступы через свойства темы или CSS-переменные:
.n-list-item {
padding: 10px 20px;
font-weight: 500;
border-radius: 6px;
}
.n-list-item:hover {
background-color: var(--n-color-primary-light);
}
n-list — контейнер списка.n-list-item — элемент списка,
поддерживает слоты prefix, suffix, активное
состояние и события.n-list-group — группировка элементов с
заголовком и возможностью сворачивания.n-virtual-list — оптимизация для
больших списков с поддержкой виртуализации.Такой подход обеспечивает гибкость и высокую производительность при создании сложных пользовательских интерфейсов на основе Naive UI.