Estoy usando ReactJS y cuando un usuario hace clic en un enlace, quiero copiar algo de texto en el portapapeles.
Estoy usando Chrome 52 y no necesito admitir ningún otro navegador.
No puedo ver por qué este código no da como resultado que los datos se copien en el portapapeles. (el origen del fragmento de código es de una publicación de Reddit).
¿Estoy haciendo esto mal? ¿Alguien puede sugerir que hay una forma "correcta" de implementar la copia al portapapeles usando 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()
}
javascript
reactjs
clipboard
Duque dugal
fuente
fuente
Respuestas:
Personalmente, no veo la necesidad de una biblioteca para esto. Mirando http://caniuse.com/#feat=clipboard ahora es bastante compatible, sin embargo, aún puede hacer cosas como verificar si la funcionalidad existe en el cliente actual y simplemente ocultar el botón de copia si no es así.
Actualización: Reescrito usando React Hooks en React 16.7.0-alpha.0
fuente
Property 'select' does not exist on type 'never'
Utilice esta sencilla función onClick en línea en un botón si desea escribir datos mediante programación en el portapapeles.
fuente
Definitivamente deberías considerar usar un paquete como @Shubham anterior, es aconsejable, pero creé un codepen funcional basado en lo que describiste: http://codepen.io/dtschust/pen/WGwdVN?editors=1111 . Funciona en mi navegador en Chrome, tal vez puedas ver si hay algo que hice allí que te perdiste, o si hay alguna complejidad extendida en tu aplicación que impide que esto funcione.
fuente
La forma más sencilla será usar el
react-copy-to-clipboard
paquete npm.Puedes instalarlo con el siguiente comando
Úselo de la siguiente manera.
Se proporciona una explicación detallada en el siguiente enlace.
https://www.npmjs.com/package/react-copy-to-clipboard
Aquí hay un violín corriendo .
fuente
onpaste
evento¿Por qué usar necesita un paquete npm cuando puede obtener todo en un solo botón como este?
Espero que esto ayude a @jerryurenaa
fuente
¿Por qué no utilizar solo el método de recopilación de clipboardData de eventos?
e.clipboardData.setData(type, content)
?En mi opinión, es el método más directo para lograr empujar algo dentro del portapapeles, mira esto (lo he usado para modificar datos mientras se realiza una acción de copia nativa):
Seguí ese camino: https://developer.mozilla.org/en-US/docs/Web/Events/copy
¡Salud!
EDITAR: para fines de prueba, he agregado codepen: https://codepen.io/dprzygodzki/pen/ZaJMKb
fuente
Su código debería funcionar perfectamente, lo uso de la misma manera. Solo asegúrese de que si el evento de clic se activa desde una pantalla emergente como un modal de arranque o algo así, el elemento creado debe estar dentro de ese modal, de lo contrario no se copiará. Siempre puede dar la identificación de un elemento dentro de ese modal (como un segundo parámetro) y recuperarlo con getElementById, luego agregar el elemento recién creado a ese en lugar del documento. Algo como esto:
fuente
Tomé un enfoque muy similar al de algunos de los anteriores, pero creo que lo hice un poco más concreto. Aquí, un componente principal pasará la url (o el texto que desee) como accesorio.
fuente
Para aquellas personas que están tratando de seleccionar desde el DIV en lugar del campo de texto, aquí está el código. El código se explica por sí mismo, pero comente aquí si desea más información:
fuente
Aquí hay otro caso de uso, si desea copiar la URL actual en su portapapeles:
Definir un método.
Llama a ese método
fuente
La mejor solución con ganchos de reacción, no necesita bibliotecas externas para eso
consulte aquí para obtener más documentación sobre navigator.clipboard , documentación de navigator.clipboard navigotor.clipboard es compatible con una gran cantidad de navegadores.
fuente
fuente
Si desea seleccionar desde el DIV en lugar del campo de texto, aquí está el código. El "código" es el valor que debe copiarse.
fuente
Aquí está mi código:
fuente
fuente
Encontré la mejor manera de hacerlo. Me refiero a la forma más rápida: w3school
https://www.w3schools.com/howto/howto_js_copy_clipboard.asp
Dentro de un componente funcional de reacción. Cree una función llamada handleCopy:
Si no usa React, w3schools también tiene una forma genial de hacerlo con información sobre herramientas incluida: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_copy_clipboard2
Si usa React, una buena idea para hacer: use un Toastify para alertar el mensaje. https://github.com/fkhadra/react-toastify Esta es la lib muy fácil de usar. Después de la instalación, puede cambiar esta línea:
Por algo como:
Si desea usarlo, no olvide instalar toastify. importar ToastContainer y también tostadas css:
y agregue el contenedor de tostadas dentro del retorno.
fuente