Добавить правильный запасной вариант для копирования в API буфера обмена в приложении React.

Я использую React 17 и создаю функцию копирования в буфер обмена:

У меня есть состояние:

      const [isCopied, setIsCopied] = useState(false);

Затем функции:

        const copyTextToClipboard = async (text: string) => {
    if (navigator?.clipboard?.writeText) {
      await navigator.clipboard.writeText(text);
    }
    // What to do here since `document.execCommand('copy', true, text);` is deprecated??
  };

  const handleCopyClick = () => {
    copyTextToClipboard(copyText)
      .then(() => {
        setIsCopied(true);
        setTimeout(() => {
          setIsCopied(false);
        }, 1500);
      })
      .catch((err) => {
        console.log(err);
      });
  };

Затем внутри jsx у меня есть текст и кнопка:

        <p>{copyText}</p>
  <button type="button" onClick={handleCopyClick}>
    <span>{isCopied ? 'Copied!' : 'Copy'}</span>
  </button>

Можно ли оптимизировать/рефакторить этот код и сделать его чище? И как добавить запасной вариант для копирования в API буфера обмена, если он не поддерживается или в этом нет необходимости, поскольку все современные браузеры его поддерживают?

0 ответов

Другие вопросы по тегам