J'utilise ReactJS et lorsqu'un utilisateur clique sur un lien, je souhaite copier du texte dans le presse-papiers.
J'utilise Chrome 52 et je n'ai pas besoin de prendre en charge d'autres navigateurs.
Je ne vois pas pourquoi ce code n'entraîne pas la copie des données dans le presse-papiers. (L'origine de l'extrait de code provient d'un article Reddit).
Est-ce que je fais ça mal? Quelqu'un peut-il suggérer qu'il existe un moyen "correct" d'implémenter la copie dans le presse-papiers en utilisant 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
Duc Dougal
la source
la source
Réponses:
Personnellement, je ne vois pas la nécessité d'une bibliothèque pour cela. En regardant http://caniuse.com/#feat=clipboard, il est assez largement pris en charge maintenant, mais vous pouvez toujours faire des choses comme vérifier si la fonctionnalité existe dans le client actuel et simplement cacher le bouton de copie si ce n'est pas le cas.
Mise à jour: réécrit à l'aide de React Hooks dans React 16.7.0-alpha.0
la source
Property 'select' does not exist on type 'never'
Utilisez cette fonction onClick en ligne simple sur un bouton si vous souhaitez écrire des données par programme dans le presse-papiers.
la source
Vous devriez certainement envisager d'utiliser un package comme @Shubham ci-dessus est conseillé, mais j'ai créé un codepen fonctionnel basé sur ce que vous avez décrit: http://codepen.io/dtschust/pen/WGwdVN?editors=1111 . Cela fonctionne dans mon navigateur dans Chrome, vous pouvez peut-être voir s'il y a quelque chose que j'ai fait là-bas que vous avez manqué, ou s'il y a une complexité étendue dans votre application qui empêche cela de fonctionner.
la source
Le moyen le plus simple sera d'utiliser le
react-copy-to-clipboard
package npm.Vous pouvez l'installer avec la commande suivante
Utilisez-le de la manière suivante.
Une explication détaillée est fournie sur le lien suivant
https://www.npmjs.com/package/react-copy-to-clipboard
Voici un violon courant .
la source
onpaste
événementPourquoi utiliser, vous avez besoin d'un package npm alors que vous pouvez tout obtenir dans un seul bouton comme celui-ci
J'espère que cela aidera @jerryurenaa
la source
Pourquoi ne pas utiliser uniquement la méthode de collecte d'événements clipboardData
e.clipboardData.setData(type, content)
?À mon avis, c'est la méthode la plus simple pour pousser smth à l'intérieur du presse-papiers, vérifiez ceci (je l'ai utilisé pour modifier les données lors de l'action de copie native):
J'ai suivi ce chemin: https://developer.mozilla.org/en-US/docs/Web/Events/copy
À votre santé!
EDIT: À des fins de test, j'ai ajouté codepen: https://codepen.io/dprzygodzki/pen/ZaJMKb
la source
Votre code doit fonctionner parfaitement, je l'utilise de la même manière. Assurez-vous seulement que si l'événement de clic est déclenché à partir d'un écran contextuel comme un modal bootstrap ou quelque chose, l'élément créé doit être dans ce modal sinon il ne sera pas copié. Vous pouvez toujours donner l'id d'un élément dans ce modal (comme deuxième paramètre) et le récupérer avec getElementById, puis ajouter l'élément nouvellement créé à celui-ci au lieu du document. Quelque chose comme ça:
la source
J'ai adopté une approche très similaire à certaines d'entre elles, mais je l'ai rendue un peu plus concrète, je pense. Ici, un composant parent passera l'url (ou le texte de votre choix) comme accessoire.
la source
Pour les personnes qui essaient de sélectionner dans le DIV au lieu du champ de texte, voici le code. Le code est explicite mais commentez ici si vous voulez plus d'informations:
la source
Voici un autre cas d'utilisation, si vous souhaitez copier l'URL actuelle dans votre presse-papiers:
Définir une méthode
Appelez cette méthode
la source
Meilleure solution avec des hooks de réaction, pas besoin de bibliothèques externes pour cela
consultez ici pour plus de documentation sur navigator.clip board , navigator.clipboard documentation navigotor.clipboard est pris en charge par un grand nombre de navigateurs regardez ici navigateur pris en charge
la source
la source
Si vous souhaitez sélectionner dans le DIV au lieu du champ de texte, voici le code. Le "code" est la valeur qui doit être copiée
la source
voici mon code:
la source
la source
J'ai trouvé la meilleure façon de le faire. je veux dire le moyen le plus rapide: w3school
https://www.w3schools.com/howto/howto_js_copy_clipboard.asp
À l'intérieur d'un composant fonctionnel de réaction. Créez une fonction nommée handleCopy:
Si vous n'utilisez pas React, w3schools a également un moyen intéressant de le faire avec l'info-bulle incluse: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_copy_clipboard2
Si vous utilisez React, pensez à faire: utilisez un Toastify pour alerter le message. https://github.com/fkhadra/react-toastify C'est la librairie très facile à utiliser. Après l'installation, vous pourrez peut-être modifier cette ligne:
Pour quelque chose comme:
Si vous souhaitez l'utiliser, n'oubliez pas d'installer toastify. import ToastContainer et toasts css:
et ajoutez le contenant de pain grillé à l'intérieur du retour.
la source