2017-05-26 12 views
0

verwenden Ich habe diesen Fehler, wenn ich AppBar-Tag von Material-Ui in einen Code von gatsby new generiert geschrieben.Wie Material-Ui und InjectTapEventPlugin mit Gatsby

Warning: Unknown prop `onTouchTap` on <button> tag. Remove this prop from the element. 

dies zu vermeiden, schrieb ich diesen Code an der Spitze der Root-Template (_template.jsx) Datei.

import injectTapEventPlugin from 'react-tap-event-plugin'; 
try { // to prevent error because of loading twice 
    injectTapEventPlugin(); 
} 
catch(e) { 
    console.warn(e); 
} 

Dies funktioniert perfekt mit HMR, aber es ist hässlich.
Was ist der richtige Weg, um dieses Problem zu lösen?

UPDATE: Um zu klären - gatsby new Klone gatsby-starter-default, und es gibt nur React-Komponenten. Zum Importieren und Schreiben von injectTapEventPlugin am Anfang von /html.js wird außerdem ein Fehler ausgegeben Warning: Unknown prop onTouchTap on <button> tag. Dies bedeutet, dass injectTapEventPlugin() nicht ordnungsgemäß aufgerufen wird.

+0

Sie importieren injectTapEventPlugin in index.js richtig? Kannst du versuchen es draußen zu versuchen? –

+0

Ich importiere injectTapEventPlugin in pages/_template.js. Wenn ich dies ohne Versuch einstelle, wird der folgende Fehler in HMR angezeigt. 'Fehler: injectTapEventPlugin(): Kann nur einmal pro Anwendungslebenszyklus aufgerufen werden. ' – pall

Antwort

0

Sie können diesen Code in html.js setzen und es wird überall

import React from 'react' 
import PropTypes from 'prop-types' 
import Helmet from 'react-helmet' 

import { prefixLink } from 'gatsby-helpers' 
import { TypographyStyle } from 'react-typography' 
import typography from './utils/typography' 
import injectTapEventPlugin from 'react-tap-event-plugin'; 

injectTapEventPlugin(); 

const BUILD_TIME = new Date().getTime() 

export default class HTML extends React.Component { 
... 

Sie können einen Blick auf diese issue in gatsby Repo auf GitHub nehmen arbeiten, was dafür spricht, dass Sie ihn in html.js

+0

Vielen Dank für Ihre Antwort. Ich fing an, die Seiten von 'gatsby new' zu erstellen. Es klont dieses Repository und es gibt keinen 'ReactDOM.render' im Benutzercode. https://github.com/gatsbyjs/gatsby-starter-default – pall

+0

@pall, ich habe meine Antwort bearbeitet, um besser zu Ihrem Problem zu passen. Könnten Sie das nochmal versuchen, einen Build ausführen und prüfen, ob das Problem besteht? Wenn ja, könnten Sie uns dann sagen, was das Problem ist? –

+0

Ich habe 'Warning: Unknown prop' onTouchTap' auf tag.und onTouchTap wurde nicht in eine AppBar injiziert. Es scheint, dass 'injectTapEventPlugin();' nur einmal aufgerufen wurde, bevor die 'Server erfolgreich gestartet! 'Ausgabe, wenn ich' gatsby develop' neu starte. [info] Ich habe in 'pages/_template.jsx' platziert. – pall

0

Sie müssen nur injectTapEventPlugin in Ihrer Top-Level-Komponente importieren und hinzufügen, von wo Sie in Ihr html-Element rendern.

import injectTapEventPlugin from 'react-tap-event-plugin'; 

injectTapEventPlugin(); 
+0

Vielen Dank für Ihre Antwort. Ich würde gerne wissen, welche Datei Sie als "Top-Level-Komponente" betrachten? 'html.js' ist die Komponente auf oberster Ebene im gatsby-starter-default, aber es macht keinen Effekt, wenn ich injectTapEventPlugin am Anfang dieser Datei setze. – pall

Verwandte Themen