我使用的是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()
}
您可以在不需要外部库的情况下完成此操作,例如:在一个按钮内
<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>
希望这有帮助。
我个人不认为有必要为此建立图书馆。看着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>
);
}
如果想通过编程将数据写入剪贴板,可以在按钮上使用这个简单的内联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文档还建议您首先检查一下,“以避