Estou usando o ReactJS e, quando um usuário clica em um link, quero copiar um texto para a área de transferência.
Estou usando o Chrome 52 e não preciso oferecer suporte a outros navegadores.
Não vejo por que esse código não resulta na cópia dos dados na área de transferência. (a origem do snippet de código é de uma postagem do Reddit).
Estou fazendo isso errado? Alguém pode sugerir que existe uma maneira "correta" de implementar a cópia na área de transferência usando o 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
Duke Dougal
fonte
fonte
Respostas:
Pessoalmente, não vejo a necessidade de uma biblioteca para isso. Observando http://caniuse.com/#feat=clipboard, ele é amplamente suportado agora, no entanto, você ainda pode fazer coisas como verificar se a funcionalidade existe no cliente atual e simplesmente ocultar o botão copiar, se não existir.
Atualização: reescrita usando ganchos de reação no React 16.7.0-alpha.0
fonte
Property 'select' does not exist on type 'never'
Use essa função onClick simples em linha em um botão se desejar gravar dados de forma programática na área de transferência.
fonte
Definitivamente, você deve considerar o uso de um pacote como o @Shubham acima, mas criei um código de funcionamento com base no que você descreveu: http://codepen.io/dtschust/pen/WGwdVN?editors=1111 . Funciona no meu navegador no chrome, talvez você possa ver se há algo que fiz lá que você perdeu ou se há alguma complexidade estendida em seu aplicativo que impede que isso funcione.
fonte
A maneira mais simples será usar o
react-copy-to-clipboard
pacote npm.Você pode instalá-lo com o seguinte comando
Use-o da seguinte maneira.
Uma explicação detalhada é fornecida no seguinte link
https://www.npmjs.com/package/react-copy-to-clipboard
Aqui está um violino correndo .
fonte
onpaste
eventoPor que usar você precisa de um pacote npm quando pode obter tudo em um único botão como este
Espero que isso ajude @jerryurenaa
fonte
Por que não usar apenas o método de coleta de dados clipboardData
e.clipboardData.setData(type, content)
?Na minha opinião, é o método mais direto para conseguir empurrar o smth para dentro da área de transferência, verifique isso (usei isso para modificar dados durante a ação de cópia nativa):
Eu segui esse caminho: https://developer.mozilla.org/en-US/docs/Web/Events/copy
Felicidades!
EDIT: Para fins de teste, eu adicionei codepen: https://codepen.io/dprzygodzki/pen/ZaJMKb
fonte
Seu código deve funcionar perfeitamente, eu uso da mesma maneira. Certifique-se apenas de que, se o evento click for acionado a partir de uma tela pop-up, como um modal de inicialização ou algo assim, o elemento criado deverá estar dentro desse modal, caso contrário não será copiado. Você sempre pode fornecer o ID de um elemento nesse modal (como um segundo parâmetro) e recuperá-lo com getElementById e, em seguida, anexar o elemento recém-criado àquele em vez do documento. Algo assim:
fonte
Adotei uma abordagem muito semelhante à anterior, mas a tornei um pouco mais concreta. Aqui, um componente pai passará o URL (ou o texto que você quiser) como um suporte.
fonte
Para as pessoas que estão tentando selecionar no DIV em vez do campo de texto, aqui está o código. O código é auto-explicativo, mas comente aqui se desejar mais informações:
fonte
Aqui está outro caso de uso, se você deseja copiar o URL atual para a área de transferência:
Definir um método
Chame esse método
fonte
Melhor solução com ganchos de reação, sem necessidade de bibliotecas externas para isso
verifique aqui para obter mais documentação sobre a placa navigator.clip , a documentação navigator.clipboard A navigotor.clipboard é suportada por um grande número de navegadores.
fonte
fonte
Se você deseja selecionar a partir do DIV em vez do campo de texto, aqui está o código. O "código" é o valor que deve ser copiado
fonte
aqui está o meu código:
fonte
fonte
Encontrou a melhor maneira de fazê-lo. quero dizer o caminho mais rápido: w3school
https://www.w3schools.com/howto/howto_js_copy_clipboard.asp
Dentro de um componente funcional de reação. Crie uma função chamada handleCopy:
Se não estiver usando o React, o w3schools também terá uma maneira legal de fazer isso com a dica de ferramenta incluída: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_copy_clipboard2
Se estiver usando o React, é interessante pensar: Use um Toastify para alertar a mensagem. https://github.com/fkhadra/react-toastify Esta é a biblioteca muito fácil de usar. Após a instalação, você poderá alterar esta linha:
Para algo como:
Se você quiser usá-lo, não se esqueça de instalar o toastify. importe ToastContainer e também brinda css:
e adicione o recipiente da torrada dentro do retorno.
fonte