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?
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.
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.