2015-10-27 15 views
9

Nachdem ich wegen der fehlenden Unterstützung für Commonjs-Module frustriert vom react_rails-Juwel war, teste ich das react_webpack_rails Juwel von Netguru. aber seit dem habe ich eine Invariant Violation bekommen.React.js Uncaught Fehler: Invariant Violation

Zum Beispiel, wenn ich eine einfache Hallo Welt Komponente in ES6 Syntax zu schreiben:

import React from 'react'; 

class tasksBox extends React.Component { 
    render() { 
    return <div>Hello World</div>; 
    } 
} 

export default tasksBox; 

erhöhen diese Fehler:

Warning: React.createElement: type should not be null, undefined, boolean, or number. It should be a string (for DOM elements) or a ReactClass (for composite components). 

Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. 

Ihre Hilfe wird sehr geschätzt werden, kann ich nicht Zahl, woher der Fehler kommt.

+0

Nichts falsch mit dem Code so das Problem ist, woanders –

+0

Wie genau willst du 'tasksBox' rendern? –

+0

Wenn das Ändern der Großschreibung das Problem wirklich behebt, muss der tatsächliche Code anders lauten. –

Antwort

6

Der Name Ihrer Reaktionskomponente ist ungültig. Es muss wie folgt groß geschrieben werden:

export class TasksBox extends React.Component { 
    render() { 
     return <div>Hello World</div>; 
    } 
} 

Sie können die Klasse inline exportieren. Bemerke ich den Namen geändert mit einem Großbuchstaben zu beginnen TasksBox statt tasksBox als Reaktion will Ihre Klassennamen mit einem Großbuchstaben


EDIT zu starten: Wenn Ihr Beispiel keine staatlichen oder anderen benutzerdefinierten definierten Funktionen, die Sie nicht brauchen, dies eine Reaktion Klasse sein .. sondern kann eine Stateless Funktion/Komponente wie so

export default (props) => { 
    return <div>Hello World</div>; 
} 
+0

Keine Notwendigkeit, 'super()' aufzurufen, wenn Sie den Konstruktor nicht überschreiben. Die Groß-/Kleinschreibung des Klassennamens spielt keine Rolle, sie spielt in JSX eine Rolle, aber wir sehen nicht, wie 'tasksBox' gerendert wird. –

+0

@FelixKling Sie haben keinen Status für die Klasse, wenn Sie den Konstruktor nicht überschreiben, wenn ich mich nicht irre, oder? Theres auch ein paar andere Dinge, die in der Antwort empfohlen wurden –

+0

Siehe meinen Kommentar zu den anderen Dingen. Richtig, Sie haben keinen Status, aber die Komponente verwendet keinen Status, das ist also kein Problem. Ich sage nicht, dass Ihre Vorschläge falsch sind, ich unterstelle, dass sie das Problem, das der Benutzer hat, nicht lösen werden. –

8

Gut sein, war die Antwort sehr einfach, benötigt, um die ersten Buchstaben des Klassennamen in Großbuchstaben zu setzen. und alles lief gut.

import React from 'react'; 

class TasksBox extends React.Component { 
    render() { 
    return <div>blabla</div>; 
    } 
} 

export default TasksBox; 

danke für Ihre Hilfe Jungs.

+0

das war eine Spezifikation in meiner Antwort –

+0

sorry verpasste das. andere Kommentare waren auch wahr, weil die Klasse unten nur ein nacktes Beispiel war. Ihre Antwort wurde angenommen :) –

+0

Das ist nicht korrekt. Das Problem liegt nicht in dieser Komponente. Wie Sie sehen können, müssen Klassennamen nicht groß geschrieben werden: https://jsfiddle.net/rprwgv52/. Die Tatsache, dass der Fehler "... but get: undefined" lautet, weist darauf hin, dass Sie die Komponente nicht korrekt importiert haben. –

3

Ich weiß, dass dies eine ältere Frage ist, aber ich bin gerade auf dieses Problem gestoßen, als ich versuchte, die react-bootstrap Komponentenbibliothek zu verwenden.

ich versuche, Dropdownbutton von ‚reagieren-Bootstrap‘ mit der neuen Import-Syntax import DropdownButton from 'react-bootstrap' und das Problem zu importieren war, dass ich geschweiften Klammern um Dropdownbutton wie so benötigt: import { DropdownButton } from 'react-bootstrap' es

Verwandte Themen