当前位置: 首页 > 知识库问答 >
问题:

在reactJS中,如何将文本复制到剪贴板?

史昀
2023-03-14

我使用的是ReactJS,当用户点击链接时,我想将一些文本复制到剪贴板。

我使用的是Chrome 52,不需要支持任何其他浏览器。

我不明白为什么这段代码不会导致数据被复制到剪贴板。(代码片段的来源来自Reddit帖子)。

我做错了吗?有人能建议有没有一种“正确”的方法来使用reactjs实现复制到剪贴板?

copyToClipboard = (text) => {
  console.log('text', text)
  var textField = document.createElement('textarea')
  textField.innerText = text
  document.body.appendChild(textField)
  textField.select()
  document.execCommand('copy')
  textField.remove()
}

共有3个答案

储仲渊
2023-03-14

您可以在不需要外部库的情况下完成此操作,例如:在一个按钮内

<button 
  onClick={() =>  navigator.clipboard.writeText('Copy this text to clipboard')}
>
  Copy
</button>

对于internet explorer 11和更早版本的浏览器,您可能需要稍微更改代码,例如:

<button 
  onClick={() =>  window.clipboardData.setData("Text", 'Copy this text to clipboard')}>
 Copy
</button>

希望这有帮助。

连俊智
2023-03-14

我个人不认为有必要为此建立图书馆。看着http://caniuse.com/#feat=clipboard它现在得到了相当广泛的支持,但是你仍然可以做一些事情,比如检查当前客户端中是否存在该功能,如果不存在,只需隐藏“复制”按钮。

import React from 'react';

class CopyExample extends React.Component {

  constructor(props) {
    super(props);

    this.state = { copySuccess: '' }
  }

  copyToClipboard = (e) => {
    this.textArea.select();
    document.execCommand('copy');
    // This is just personal preference.
    // I prefer to not show the whole text area selected.
    e.target.focus();
    this.setState({ copySuccess: 'Copied!' });
  };

  render() {
    return (
      <div>
        {
         /* Logical shortcut for only displaying the 
            button if the copy command exists */
         document.queryCommandSupported('copy') &&
          <div>
            <button onClick={this.copyToClipboard}>Copy</button> 
            {this.state.copySuccess}
          </div>
        }
        <form>
          <textarea
            ref={(textarea) => this.textArea = textarea}
            value='Some text to copy'
          />
        </form>
      </div>
    );
  }

}
    
export default CopyExample;

更新:使用React 16.7.0-alpha中的React钩子重写。0

import React, { useRef, useState } from 'react';

export default function CopyExample() {

  const [copySuccess, setCopySuccess] = useState('');
  const textAreaRef = useRef(null);

  function copyToClipboard(e) {
    textAreaRef.current.select();
    document.execCommand('copy');
    // This is just personal preference.
    // I prefer to not show the whole text area selected.
    e.target.focus();
    setCopySuccess('Copied!');
  };

  return (
    <div>
      {
       /* Logical shortcut for only displaying the 
          button if the copy command exists */
       document.queryCommandSupported('copy') &&
        <div>
          <button onClick={copyToClipboard}>Copy</button> 
          {copySuccess}
        </div>
      }
      <form>
        <textarea
          ref={textAreaRef}
          value='Some text to copy'
        />
      </form>
    </div>
  );
}
关飞翔
2023-03-14

如果想通过编程将数据写入剪贴板,可以在按钮上使用这个简单的内联onClick函数。

onClick={() => {navigator.clipboard.writeText(this.state.textToCopy)}}
 类似资料:
  • 问题内容: 在我的Go语言命令行应用程序中,我需要能够使用Go将某些文本片段复制到系统剪贴板。基本上类似于PyperClip,但适用于Go。 我正在寻找与平台无关的解决方案!任何帮助将是巨大的:) 问题答案: 一个项目(仅适用于Windows和Mac)似乎正在接近您想要的:。 提供复制和粘贴到剪贴板的Go。 剪贴板_linux.go类中提供Linux支持:系统命令的简单包装。 另一种方法:尝试利用

  • 问题内容: 这是我在用户单击此按钮时的代码: 如何在此div中复制文本? 问题答案: JAVASCRIPT:

  • 这是用户点击此按钮时的代码: 如何复制此div中的文本?

  • 我在reactjs初学者,我想复制一个颜色,当我点击颜色。 应该怎么做呢?

  • 我有一个HTML格式的表,我看到有人复制/粘贴该表的部分内容。当我尝试它的时候,结果是一团糟,需要大量的清理,因为表中包含了大量带有图像和其他东西的列。 有没有办法将选择限制在表的前2列? 有没有办法替换正在复制的文本(用户选择“Apple”并按下复制,但“Banana”最终出现在剪贴板中)?

  • 问题内容: 我正在寻找一个如何将文本复制到iOS剪贴板的干净示例,然后可以在其他应用程序中使用/粘贴该文本。 此功能的优点是可以快速复制文本,而无需传统文本复制的标准文本突出显示功能。 我假设键类在其中,但是在它们提供的代码示例中找不到相关的区域。 问题答案: 如果您只需要纯文本,则可以使用属性。它既可读又可写: (从剪贴板中 读取数据时 ,UIPasteboard文档还建议您首先检查一下,“以避