Używam ReactJS i kiedy użytkownik kliknie łącze, chcę skopiować tekst do schowka.
Używam Chrome 52 i nie potrzebuję obsługi żadnych innych przeglądarek.
Nie rozumiem, dlaczego ten kod nie powoduje skopiowania danych do schowka. (źródło fragmentu kodu pochodzi z posta na Reddicie).
Czy robię to źle? Czy ktoś może zasugerować, czy istnieje „poprawny” sposób na zaimplementowanie kopiowania do schowka za pomocą reagjs?
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
Książę Dougal
źródło
źródło
Odpowiedzi:
Osobiście nie widzę w tym potrzeby biblioteki. Patrząc na http://caniuse.com/#feat=clipboard, jest teraz dość szeroko obsługiwany, jednak nadal możesz robić takie rzeczy, jak sprawdzanie, czy funkcja istnieje w obecnym kliencie i po prostu ukrywać przycisk kopiowania, jeśli tak nie jest.
Aktualizacja: Przepisano przy użyciu React Hooks w React 16.7.0-alpha.0
źródło
Property 'select' does not exist on type 'never'
Użyj tej prostej funkcji inline onClick na przycisku, jeśli chcesz programowo zapisać dane do schowka.
źródło
Zdecydowanie powinieneś rozważyć użycie pakietu takiego jak @Shubham powyżej, który radzi, ale stworzyłem działający kod na podstawie tego, co opisałeś: http://codepen.io/dtschust/pen/WGwdVN?editors=1111 . Działa w mojej przeglądarce w Chrome, być może możesz zobaczyć, czy jest coś, co tam zrobiłem, co przegapiłeś, lub czy w twojej aplikacji jest jakaś rozszerzona złożoność, która uniemożliwia to działanie.
źródło
Najprostszym sposobem będzie użycie
react-copy-to-clipboard
pakietu npm.Możesz go zainstalować za pomocą następującego polecenia
Użyj go w następujący sposób.
Szczegółowe wyjaśnienie znajduje się pod poniższym linkiem
https://www.npmjs.com/package/react-copy-to-clipboard
Oto biegające skrzypce .
źródło
onpaste
wydarzenieDlaczego potrzebujesz pakietu npm, skoro możesz uzyskać wszystko za pomocą jednego przycisku, takiego jak ten
Mam nadzieję, że to pomoże @jerryurenaa
źródło
Dlaczego nie używać tylko metody zbierania danych ze schowka zdarzeń
e.clipboardData.setData(type, content)
?Moim zdaniem jest to najbardziej prosta metoda na wypchnięcie czegoś do schowka, sprawdź to (użyłem tego do modyfikacji danych podczas natywnej akcji kopiowania):
Podążałem tą ścieżką: https://developer.mozilla.org/en-US/docs/Web/Events/copy
Twoje zdrowie!
EDYCJA: Do testów dodałem kod: https://codepen.io/dprzygodzki/pen/ZaJMKb
źródło
Twój kod powinien działać idealnie, używam go w ten sam sposób. Upewnij się tylko, że jeśli zdarzenie kliknięcia jest wywoływane z poziomu wyskakującego ekranu, takiego jak modalny bootstrap lub coś podobnego, utworzony element musi znajdować się w tym modalu, w przeciwnym razie nie zostanie skopiowany. Zawsze możesz podać id elementu wewnątrz tego modalu (jako drugi parametr) i pobrać go za pomocą metody getElementById, a następnie dołączyć nowo utworzony element do tego elementu zamiast do dokumentu. Coś takiego:
źródło
Podjąłem bardzo podobne podejście, jak w przypadku niektórych z powyższych, ale wydaje mi się, że stało się to trochę bardziej konkretne. Tutaj komponent nadrzędny przekaże adres URL (lub dowolny tekst, który chcesz) jako rekwizyt.
źródło
Dla osób, które próbują wybrać z DIV zamiast pola tekstowego, oto kod. Kod jest zrozumiały, ale jeśli chcesz uzyskać więcej informacji, dodaj komentarz:
źródło
Oto inny przypadek użycia, jeśli chcesz skopiować bieżący adres URL do schowka:
Zdefiniuj metodę
Wywołaj tę metodę
źródło
Najlepsze rozwiązanie z zaczepami do reagowania, bez konieczności korzystania z zewnętrznych bibliotek
sprawdź tutaj, aby uzyskać dalszą dokumentację dotyczącą tablicy navigator.clip , navigator.clipboard dokumentacja navigotor.clipboard jest obsługiwana przez ogromną liczbę przeglądarek spójrz tutaj obsługiwana przeglądarka
źródło
źródło
Jeśli chcesz wybrać z DIV zamiast pola tekstowego, oto kod. „Kod” to wartość, która ma zostać skopiowana
źródło
oto mój kod:
źródło
źródło
Znalazłem najlepszy sposób na zrobienie tego. mam na myśli najszybszy sposób: w3school
https://www.w3schools.com/howto/howto_js_copy_clipboard.asp
Wewnątrz elementu funkcjonalnego Reaguj. Utwórz funkcję o nazwie handleCopy:
Jeśli nie używasz Reacta, w3schools mają również jeden fajny sposób na zrobienie tego z dołączoną etykietką: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_copy_clipboard2
Jeśli korzystasz z Reacta, fajne rozwiązanie: użyj Toastify, aby zaalarmować wiadomość. https://github.com/fkhadra/react-toastify To jest biblioteka bardzo łatwa w użyciu. Po instalacji możesz zmienić tę linię:
Na coś takiego:
Jeśli chcesz go użyć, nie zapomnij zainstalować toastify. import ToastContainer, a także toasty css:
i włóż pojemnik na tosty do powrotu.
źródło