den folgenden Code Angenommen:den Datentyp Reagieren Komponenten propTypes Definition
TestComponent.propTypes = {
text: React.PropTypes.string,
myEnum: React.PropTypes.oneOf(['News', 'Photos'])
};
Ich habe in einer anderen Datei die folgende (das wurde mit Testcomponent):
if (TestComponent.propTypes.text === React.PropTypes.string) {...}
if (TestComponent.propTypes.myEnum === React.PropTypes.oneOf) {...}
Nun, die zu meiner Zufriedenheit zuerst, wenn gearbeitet wurde. Aber das zweite, wenn es nie wieder wahr ist. Ich habe versucht, es in die Syntax unten zu ändern, aber es hat nicht geholfen.
Also, die Frage ist: Welchen Mechanismus gibt es, um den Typ einer Stütze zu entdecken? Ich weiß, dass React den Wert eines Props gegen den PropType testet, um es zu validieren. Ich brauche aber auch Zugriff auf den 'erwarteten Typ', um meine Sachen zu machen.
BTW, hier ist ein Auszug aus dem Code reagieren, die propTypes (abgekürzt aus Gründen der Kürze) bestätigt:
function createPrimitiveTypeChecker(expectedType) {
function validate(props, propName, componentName, location, propFullName){
var propValue = props[propName];
var propType = getPropType(propValue);
if (propType !== expectedType) {
// return some Error
}
return null;
}
return createChainableTypeChecker(validate);
}
Wie Sie sehen können die Parameter der äußeren Funktion expectedType ist. Es wird in der inneren Validierungsfunktion verwendet (if (propType! == expectedType)). React speichert den expectedType jedoch nicht in einer Membervariablen, sodass auf ihn durch externen Code zugegriffen werden kann. Also, wie findet der äußere Code den Typ des propType?
Mein Punkt ist es nicht, einen bestimmten Wert für die Requisite zu 'validieren'. Das wird von React sehr gut erledigt. Mein Punkt ist, eine bestimmte Logik abhängig von der Requisite Art zu tun, die ich mit Arten wie anyOf, objectOf, Form, etc. nicht erreichen kann.
Irgendwelche Gedanken, Vorschläge ??
Siehe meine Antwort für eine Erklärung. Es gibt eine Funktion Anfrage und eine PR in Bearbeitung, um dies zu beheben, siehe hier und +1: https://github.com/facebook/react/issues/8310 – VladFr