当前位置: 首页 > news >正文

React中实现一键复制——五种办法

React中实现一键复制——五种办法

  • copy-to-clipboard库(推荐)
  • react-copy-to-clipboard库(推荐)
  • navigator.clipboard.writeText(e)(推荐)
  • document.execcommand(“copy”)
  • copy-js库

copy-to-clipboard

1、安装方式

// npm安装---这种方式可能会对babel的版本有限制
npm i --save copy-to-clipboard


//cdn引入
<script src="https://wzrd.in/standalone/copy-to-clipboard@latest" async></script>

2、使用方式

import copy from 'copy-to-clipboard';
const handleClick = ()=>{
	copy('复制的内容');
	message.success('复制成功')
}

<Button onClick={handleClick}>复制</Button>

react-copy-to-clipboard

该方法是基于copy-to-clipboard的,如果在安装copy-to-clipboard的时候,发现和其他部分npm包有版本限制的话,那估计这个也不行,但是也不是不可以试试
1、安装

npm i --save react-copy-to-clipboard

2、用法——这里有个地方要注意,在<CopyToClipboard></CopyToClipboard>中,只能有一个根元素,并且本人亲试,如果在<CopyToClipboard></CopyToClipboard>中,一个根元素裹着两个兄弟节点比如div和一个button的话,复制也不会生效,我也不知道为啥,有兴趣的小伙伴可以去看看源码。

import { CopyToClipboard } from 'react-copy-to-clipboard';

 <CopyToClipboard text={'复制的内容'}
   onCopy={(_, result) => {
     if (result) {
       message.success('复制成功');
     } else {
       message.error('复制失败,请稍后再试');
     }
   }}
 >
   <Button
     type='primary'
     icon={<CopyOutlined />}
   />
 </CopyToClipboard>

document.execcommand(“copy”)——已被弃用

不过好似有的浏览器还可以使用,具体看文档点我
这个方法我没有使用过,有什么坑我也不清楚。

使用方法


<button id="btn"  style="margin-top: 40px;">一键复制</button>

const btn = document.querySelector('#btn');
  btn.addEventListener('click', () => {
      const textarea= document.createElement('textarea');
      textarea.setAttribute('readonly', 'readonly');
      textarea.value = 'xxxxx';
      document.body.appendChild(textarea);
      textarea.select();
      if (document.execCommand('copy')) {
          document.execCommand('copy');
          alert('复制成功');
      }
      document.body.removeChild(textarea);
  })

copy-js库

这块我只是找到了这个库,也没有使用过,但是我看源码底层也是使用的document.execcommand("copy")
1、安装

// npm包下载
npm install copy-js --save

// CDN导入
<script src="//cdn.rawgit.com/duyetdev/copy.js/master/dist/copy.min.js"></script>

2、使用

import copy from 'copy-to-clipboard';
copy('hello world', function(err) {
    if (err) console.log('Some thing went wrong!');
 
    console.log('Copied!');
});

navigator.clipboard.writeText(e)

这个方法也有踩坑的地方,开发时间比较短,也没有具体去研究原因
这个方法的参数e,是需要拿到input文本框的value值为复制的节点

但是这个方法可能在一些应用里边的端内浏览器会有限制,在正常浏览器里是可以使用的,但是比如说现在在飞书端内浏览器里边是没有clipboard这个对象的。还是得看场景使用。

1、使用方法

const { Search } = Input;
const copyLink = (e: any) => {
  navigator.clipboard.writeText(e).then(
    () => {
      message.success(intl.t('复制成功'));
      console.log(e);
    },
    () => {
      message.error(intl.t('复制失败,请稍后再试'));
    },
  );
};


 <Search
   bordered={false}
   value={window.location.href}
   enterButton={intl.t('复制链接')}
   size='middle'
   onSearch={copyLink}
 />

可能还有其他一些方法,暂时没有想到的

相关文章:

  • byName自动装配和byType自动装配
  • 【黑马Java笔记汇总】JavaSE+JavaWeb+SSM+Springboot笔记汇总
  • DRF 用户认证
  • 系统架构演变历史及集群、分布式、微服务、SOA的概念区别
  • 四、RocketMq本地集群搭建
  • 金仓数据库 KingbaseES 插件参考手册 xml2
  • FITC-PEG-SH/Fluorescent-PEG-SH 多种分子量可选/荧光素聚乙二醇巯基 FITC-PEG-SH
  • 常用hooks用法总结
  • 赛默飞世尔Thermo Fisher仪器电路板维修故障概述
  • 对于生物素-PEG32-NHS 酯,Biotin-PEG32-NHS ester物理性质大家了解多少了?
  • 关于神经网络的正确说法,神经网络通俗的解释是
  • python带你采集桌游、剧本杀游戏店数据信息~
  • sd卡数据丢失的原因有哪些?常见的sd卡数据丢失原因及恢复方法
  • 深度神经网络的训练过程
  • 【04】MapReduce
  • JavaScript-如何实现克隆(clone)函数
  • 【笔记】你不知道的JS读书笔记——Promise
  • iOS 系统授权开发
  • Java IO学习笔记一
  • Java超时控制的实现
  • Python十分钟制作属于你自己的个性logo
  • Sass Day-01
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • TypeScript迭代器
  • 从PHP迁移至Golang - 基础篇
  • 工作中总结前端开发流程--vue项目
  • 构造函数(constructor)与原型链(prototype)关系
  • 简析gRPC client 连接管理
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 码农张的Bug人生 - 初来乍到
  • 使用putty远程连接linux
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 微信小程序:实现悬浮返回和分享按钮
  • 原生 js 实现移动端 Touch 滑动反弹
  • UI设计初学者应该如何入门?
  • ​卜东波研究员:高观点下的少儿计算思维
  • #162 (Div. 2)
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (26)4.7 字符函数和字符串函数
  • (4)(4.6) Triducer
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (k8s中)docker netty OOM问题记录
  • (二)JAVA使用POI操作excel
  • (二十四)Flask之flask-session组件
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转载)深入super,看Python如何解决钻石继承难题
  • ***原理与防范
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .net web项目 调用webService