React: Variable bezieht sich auf new Date() kann kein untergeordnetes Element sein.

Erstellt am 17. Okt. 2016  ·  3Kommentare  ·  Quelle: facebook/react

Ich folge einem Code-Snippet aus dem Buch React Quickly .
Und ich kann den Code nicht ausführen, nachdem er über Babel kompiliert wurde.
Mein Code lautet wie folgt:

class DateTimeNow extends React.Component{
    render(){
        let dateTimeNow = new Date();
        return <span>Current date and time is {dateTimeNow}.</span>;
    }
}
ReactDOM.render(
    <DateTimeNow/>,
    document.getElementById('content')
);

Die vom Browser gemeldete Fehlermeldung lautet:
Uncaught Invariant Violation: Objects are not valid as a React child (found: Mon Oct 17 2016 09:12:00 GMT+0800 (CST)). If you meant to render a collection of children, use an array instead or wrap the object using createFragment(object) from the React add-ons. Check the render method of DateTimeNow .

Könnten Sie bitte helfen, zu beantworten, warum es einen Fehler verursacht?
Vielen Dank!

Möchten Sie ein _Feature_ anfordern oder einen _Bug_ melden?

Wie ist das aktuelle Verhalten?
Fehlermeldung: Nicht abgefangene unveränderliche Verletzung: Objekte sind nicht als untergeordnetes React-Objekt gültig (gefunden: Mo 17.10.2016 09:12:00 GMT+0800 (CST)). Wenn Sie eine Sammlung von untergeordneten Elementen rendern möchten, verwenden Sie stattdessen ein Array oder wickeln Sie das Objekt mit createFragment(object) aus den React-Add-Ons ein. Überprüfen Sie die Rendermethode von DateTimeNow .

Wenn das aktuelle Verhalten ein Fehler ist, stellen Sie bitte die Schritte zur Reproduktion und wenn möglich eine minimale Demo des Problems über https://jsfiddle.net oder ähnlich bereit (Vorlage: https://jsfiddle.net/reactjs/69z2wepo/).

Was ist das erwartete Verhalten?
span-Tag zeigt die aktuelle Uhrzeit an
Welche React-Versionen und welche Browser/Betriebssysteme sind von diesem Problem betroffen?
Reagieren 15.3.2

Hilfreichster Kommentar

Die kurze Antwort ist, dass Sie eine toString() Methode für Ihre dateTimeNow-Variable aufrufen müssen, da es sich um ein Datums-_Objekt_ und nicht um eine Zeichenfolge handelt. dh eines der 'Objekte', auf das sich die Fehlermeldung bezieht.

return <span>Current date and time is {dateTimeNow.toUTCString()}.</span>;

Die Fehlermeldung ist jedoch zunächst verwirrend, da sie das Datum einfach als Zeichenfolge rendert. Wenn Sie beispielsweise {dateTimeNow} durch ein Objekt wie { {a: 1} } ersetzen, {dateTimeNow} die Fehlermeldung etwas mehr Sinn:

Uncaught Error: Objects are not valid as a React child (found: object with keys {a}).

Alle 3 Kommentare

Die kurze Antwort ist, dass Sie eine toString() Methode für Ihre dateTimeNow-Variable aufrufen müssen, da es sich um ein Datums-_Objekt_ und nicht um eine Zeichenfolge handelt. dh eines der 'Objekte', auf das sich die Fehlermeldung bezieht.

return <span>Current date and time is {dateTimeNow.toUTCString()}.</span>;

Die Fehlermeldung ist jedoch zunächst verwirrend, da sie das Datum einfach als Zeichenfolge rendert. Wenn Sie beispielsweise {dateTimeNow} durch ein Objekt wie { {a: 1} } ersetzen, {dateTimeNow} die Fehlermeldung etwas mehr Sinn:

Uncaught Error: Objects are not valid as a React child (found: object with keys {a}).

https://github.com/facebook/react/issues/7988#issuecomment -254148427 ist korrekt.

Datumsangaben sind Objekte in JS, aber Ihre Renderausgabe darf nur React-Elemente, Strings und Zahlen enthalten. Das Formatieren eines Strings mit einer beliebigen toString() -ähnlichen Methode wird funktionieren.

Eine Liste solcher Methoden finden Sie auf MDN .

Beifall!

Warum kann React nicht automatisch .toString() für uns aufrufen, eine lá-String-Interpolation? Zu viel Overhead?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen