ClipboardButton — это компонент WordPress, который позволяет пользователю копировать текст в буфер обмена одним нажатием кнопки. Несмотря на то, что компонент считается устаревшим и рекомендуется использовать хук useCopyToClipboard из пакета @wordpress/compose, ClipboardButton всё ещё может применяться в проектах.

Основные сведения о ClipboardButton
Компонент ClipboardButton позволяет пользователю копировать текст или другие элементы в буфер обмена, что упрощает процесс копирования. Например, этот компонент полезен для создания кнопки, с помощью которой можно быстро копировать ссылку или фрагмент кода.
Применение компонента ClipboardButton
В данном примере создается кнопка, которая копирует указанный текст и показывает уведомление «Скопировано!» после успешного копирования.
import { useState } from 'react';
import { ClipboardButton } from '@wordpress/components';
const CopyExample = () => {
    const [hasCopied, setHasCopied] = useState(false);
    return (
        <ClipboardButton
            className="custom-clipboard-button"
            text="Скопируйте этот текст!"
            onCopy={() => setHasCopied(true)}
            onFinishCopy={() => setHasCopied(false)}
            variant="primary"
        >
            {hasCopied ? 'Скопировано!' : 'Копировать текст'}
        </ClipboardButton>
    );
};
Основные свойства (Props)
className
- Описание: CSS-класс, который будет добавлен к кнопке.
- Тип: string
- Обязателен: Нет
- Пример:
<ClipboardButton className="custom-button" text="Text to copy" />
text
- Описание: Текст, который будет скопирован в буфер обмена при нажатии на кнопку.
- Тип: string
- Обязателен: Да
- Пример:
<ClipboardButton text="Скопируйте этот текст" />
onCopy
- Описание: Функция, вызываемая в момент копирования текста.
- Тип: () => void
- Обязателен: Да
- Пример:
<ClipboardButton
    text="Скопируйте этот текст"
    onCopy={() => alert('Текст скопирован!')}
/>
onFinishCopy
- Описание: Функция, вызываемая после завершения анимации копирования.
- Тип: () => void
- Обязателен: Нет
- Пример:
<ClipboardButton
    text="Скопируйте этот текст"
    onCopy={() => console.log('Копирование началось')}
    onFinishCopy={() => console.log('Копирование завершено')}
/>
variant
- Описание: Определяет внешний вид кнопки (например, primary, secondary).
- Тип: string
- Обязателен: Нет
- Пример:
<ClipboardButton text="Скопируйте текст" variant="secondary" />
Наследуемые свойства
ClipboardButton наследует свойства компонента <Button>, поэтому можно добавлять любые дополнительные параметры, поддерживаемые <Button>, такие как disabled, aria-label и другие.
Пример 1: Базовая кнопка копирования с уведомлением
В этом примере кнопка копирует текст «Скопируйте этот текст!» и выводит уведомление о том, что копирование прошло успешно.
import { useState } from 'react';
import { ClipboardButton } from '@wordpress/components';
const CopyWithNotification = () => {
    const [copyStatus, setCopyStatus] = useState(false);
    return (
        <ClipboardButton
            text="Скопируйте этот текст!"
            onCopy={() => setCopyStatus(true)}
            onFinishCopy={() => setCopyStatus(false)}
            variant="primary"
        >
            {copyStatus ? 'Текст скопирован!' : 'Скопировать текст'}
        </ClipboardButton>
    );
};
Пример 2: Использование с разными стилями и значками
Этот пример демонстрирует, как использовать ClipboardButton с разными стилями, добавляя значки и применяя кастомный CSS-класс.
import { useState } from 'react';
import { ClipboardButton } from '@wordpress/components';
const StyledClipboardButton = () => {
    const [copied, setCopied] = useState(false);
    return (
        <ClipboardButton
            className="styled-clipboard-button"
            text="Ссылка для копирования"
            onCopy={() => setCopied(true)}
            onFinishCopy={() => setCopied(false)}
            variant="secondary"
        >
            {copied ? 'Скопировано!' : 'Копировать ссылку'}
        </ClipboardButton>
    );
};
Пример 3: Кнопка копирования с анимацией
В следующем примере используется ClipboardButton с анимацией, чтобы показать, как статус «Скопировано!» отображается на ограниченное время, после чего возвращается к исходному состоянию.
import { useState, useEffect } from 'react';
import { ClipboardButton } from '@wordpress/components';
const AnimatedClipboardButton = () => {
    const [isCopied, setIsCopied] = useState(false);
    useEffect(() => {
        if (isCopied) {
            const timer = setTimeout(() => setIsCopied(false), 1500);
            return () => clearTimeout(timer);
        }
    }, [isCopied]);
    return (
        <ClipboardButton
            text="Текст для копирования"
            onCopy={() => setIsCopied(true)}
            variant="primary"
        >
            {isCopied ? 'Скопировано!' : 'Нажмите для копирования'}
        </ClipboardButton>
    );
};
Заключение
ClipboardButton — это удобный компонент для добавления функции копирования текста в буфер обмена, особенно полезный для интерфейсов, где пользователям часто нужно копировать ссылки, текстовые данные и другие элементы.
