2016-07-07 10 views
0

Ich versuche clipboard.js in einer Reaktion Komponente zu verwenden, und es bewirkt, dass mein devserver mit dem Knoten Fehler starten Fehler: ReferenceError: Element is not defined at Object.<anonymous> (/mnt/home/me/code/board/webapp/node_modules/matches-selector/index.js:6:13)Fehler mit der Zwischenablage.js in React-Komponente?

mir die Zwischenablage in componentDidMount initialisieren aber bin immer noch diesen Fehler. Ich glaube tatsächlich, dass der Fehler etwas mit meinem Import zu tun hat, denn selbst wenn ich die Zwischenablage nicht initialisiere (aber den Import mit einschließe), erhalte ich den Fehler. Hat jemand eine Idee, was ich falsch machen könnte?

Relevante Code (Styling ausgeschlossen):

import React, { Component } from 'react'; 
import Clipboard from 'clipboard'; 

export default class CodeSnippet extends Component { 
    constructor(props) { 
     super(props); 
    } 

    componentDidMount() { 
     new Clipboard('.copyButton', { 
      target:() => document.getElementById('snippet') 
     }); 
    } 

    render() { 
     return (  
      <div style={styles.snippetCopy}> 
       <div id="snippet" style={styles.snippet}> 
        {'this text will copy'} 
       </div> 
       <button 
        className={"copyButton"} 
        id="clipper" 
        data-clipboard-text='snippet' 
        style={styles.buttonStyle} 
        text={'Copy code'}> 
       </button> 
      </div> 
     ); 
    } 
} 

Antwort

3

Sie können nicht clipboard.js benötigen, wenn Sie serverseitige Rendering tun. Es ist ärgerlich, sondern über npm zu installieren, sie schlagen vor, einschließlich das Skript manuell wie folgt aus:

<script src="https://cdn.jsdelivr.net/clipboard.js/1.5.12/clipboard.min.js"></script> 

https://github.com/zenorocha/clipboard.js/issues/157

+1

Ich sollte hinzufügen, dass der Grund, warum Sie die lib auf der Serverseite nicht laden können, weil es sofort versucht, auf 'window.Element' zuzugreifen, was offensichtlich nicht tut existieren, bis die Seite in einem Browser gerendert wird. –

3

habe ich eine Geige Code zu aktualisieren. Es ist ein Vorschlag der Integration clipboardjs und React, mit ref's und clipboardjs' text function.

prüfen: https://jsfiddle.net/mrlew/L54ky6hj/

+0

Danke für die Geige! Das ist eine viel bessere Integration von React. Ich erhalte immer noch den Node-Fehler beim Import der Zwischenablage. – user3802348

+0

ich teste hier in einem react-test-projekt, und es hat geklappt. Versuchen Sie, Ihre Pakete zu aktualisieren (react, clipboard) ('npm update clipboard') und/oder neu zu installieren (' npm uninstall clipboard && npm install clipboard --save'). Versuchen Sie das gleiche mit reagieren. Verwenden Sie Webpack? – mrlew

+0

Die "kopierte" Nachricht (Tooltip) fehlt. Ich frage mich, ob dies ein Klemmbrett js Bug ist, wenn in Reaktion verwendet – Chaoste