Компонент Mentions предоставляет удобный способ ввода текста с автодополнением упоминаний пользователей или любых других объектов. Он часто используется в чатах, комментариях или системах уведомлений, где требуется выделять имена пользователей или теги внутри текста. В Ant Design компонент реализован как высокоуровневый контрол с встроенной логикой автодополнения и фильтрации.
@ для упоминаний. При вводе этого
символа компонент открывает список вариантов.Option, что позволяет использовать любую разметку внутри
списка.onChange, onSelect и
onSearch.value и defaultValue.import { Mentions } from 'antd';
const { Option } = Mentions;
function App() {
return (
<Mentions
style={{ width: '100%' }}
placeholder="Введите текст с упоминанием"
>
<Option value="Alice">Alice</Option>
<Option value="Bob">Bob</Option>
<Option value="Charlie">Charlie</Option>
</Mentions>
);
}
Mentions – контейнер для ввода текста
с поддержкой автодополнения.Option – отдельный вариант для
упоминания, value используется при вставке в текст.style – позволяет задавать размеры и
оформление компонента.При вводе символа @ открывается список
Option, и пользователь может выбрать элемент, который будет
вставлен в текст.
Компонент может быть как контролируемым, так и неконтролируемым.
Контролируемый пример:
import { Mentions } from 'antd';
import { useState } from 'react';
const { Option } = Mentions;
function ControlledMentions() {
const [value, setValue] = useState('');
return (
<Mentions
value={value}
onCha nge={setValue}
style={{ width: '100%' }}
>
<Option value="Alice">Alice</Option>
<Option value="Bob">Bob</Option>
</Mentions>
);
}
value – текущее значение
компонента.onChange – функция обратного вызова,
вызывается при изменении текста.Контролируемый компонент полезен при необходимости интеграции с формами или хранении текста в состоянии приложения.
Компонент поддерживает ключевые события:
onChange(value) – срабатывает при
изменении текста.onSelect(option, prefix) – вызывается
при выборе варианта из списка; option содержит объект
выбранного элемента, prefix – символ-триггер.onSearch(text, prefix) – вызывается
при вводе текста после символа-триггера, удобно для динамической
подгрузки опций.Пример использования onSearch для динамической
фильтрации:
import { Mentions } from 'antd';
import { useState } from 'react';
const { Option } = Mentions;
const users = ['Alice', 'Bob', 'Charlie', 'David'];
function DynamicMentions() {
const [filteredUsers, setFilteredUsers] = useState(users);
const handleSearch = (text) => {
setFilteredUsers(users.filter(user => user.toLowerCase().includes(text.toLowerCase())));
};
return (
<Mentions style={{ width: '100%' }} onSea rch={handleSearch}>
{filteredUsers.map(user => (
<Option key={user} value={user}>{user}</Option>
))}
</Mentions>
);
}
onSearch используется для запроса к API или локальной
фильтрации.По умолчанию триггер – @. Его можно изменить через
свойство prefix:
<Mentions prefix={['@', '#']}>
<Option value="Alice">Alice</Option>
<Option value="React">React</Option>
</Mentions>
#), и для упоминаний
(@).Option может содержать любую
JSX-разметку, например, аватар и имя пользователя:<Option value="Alice">
<img src="alice.png" alt="Alice" style={{ width: 20, marginRight: 8 }} />
Alice
</Option>
autoFocus – автоматически фокусирует
компонент при рендере.notFoundContent – сообщение при
отсутствии подходящих вариантов.placement – позиционирование
выпадающего списка (topLeft, bottomRight и
др.).split – символ, который используется
для разделения текста при вставке упоминаний.Пример с кастомизацией notFoundContent:
<Mentions notFoundContent="Нет совпадений" style={{ width: '100%' }}>
<Option value="Alice">Alice</Option>
</Mentions>
onSearch с ленивой загрузкой опций, чтобы не рендерить весь
список сразу.Form.Item в Ant Design Forms.Компонент Mentions обеспечивает мощный и гибкий способ управления текстовыми упоминаниями, сочетая удобство встроенного автодополнения с возможностью полной кастомизации внешнего вида и поведения списка вариантов.