React: React.PropTypes.node sollte zustandslose Komponenten (Funktion) akzeptieren

Erstellt am 22. Nov. 2015  ·  3Kommentare  ·  Quelle: facebook/react

Ich habe gerade einige Reaktionskomponenten ersetzt, die mit es6-Klassen definiert wurden, und ich erhalte jetzt Warnungen, dass meine zustandslose Reaktionskomponente (die nur eine Funktion ist) kein ReactNode ist.

Warning: Failed propType: Invalid prop `Loader` supplied to `Picture`, expected a ReactNode.

Ich habe einige Komponenten mit React.PropTypes.node validiert, aber jetzt muss ich PropTypes.oneOfType([ PropTypes.node, PropTypes.func ]) verwenden, was etwas lang erscheint, um zu sagen: "Dies kann alles sein, was als Komponente gerendert werden kann" (was ProTypes.node soll richtig abdecken?).

Aus dem Dok

    // Anything that can be rendered: numbers, strings, elements or an array
    // (or fragment) containing these types.
    optionalNode: React.PropTypes.node,

Vielleicht sollten func hinzugefügt werden? Oder gibt es einen Grund, warum node nicht auch func verarbeitet?

Hilfreichster Kommentar

Kannst du zeigen, wie du das benutzt hast? Ich denke auch nicht, dass Komponentenklassen für node gültig sein sollten. node soll alles akzeptieren, was gerendert werden kann. Klassen können nicht direkt gerendert werden – Sie würden ein Element mit dem Typ set übergeben.

Alle 3 Kommentare

Was ist mit dem Hinzufügen eines neuen propType-Validators? Etwas wie

propTypes: {
    optionalComponent: React.PropTypes.component
}

wo Komponente Form von haben würde

PropTypes.oneOfType([ PropTypes.node, PropTypes.func ])

oder etwas ähnliches. Meiner Meinung nach ist es ziemlich gefährlich, Personen Funktionen übergeben zu lassen, aber ich bin mir nicht sicher, wie ich eine bessere Validierung vornehmen kann. Das Lesen function.toString scheint ein gigantischer Hack zu sein, der nach der Minifizierung nicht funktionieren würde, aber dies ist die einzige Option, die mir bekannt ist.

Kannst du zeigen, wie du das benutzt hast? Ich denke auch nicht, dass Komponentenklassen für node gültig sein sollten. node soll alles akzeptieren, was gerendert werden kann. Klassen können nicht direkt gerendert werden – Sie würden ein Element mit dem Typ set übergeben.

Oh mein Gott. Du hast ja so recht. Ich fühle mich dumm. Ich glaube, ich habe etwas auf die schlechte Art validiert. Sorry für den Lärm.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen