Non è possibile leggere direttamente dal propTypes
dal momento che, come lei ha detto, essi sono definiti come funzioni.
È possibile invece definire i propri propType in un formato intermedio, dal quale si genera lo statico propTypes
.
var myPropTypes = {
color: {
type: 'oneOf',
value: ['green', 'blue', 'yellow'],
},
};
function processPropTypes(propTypes) {
var output = {};
for (var key in propTypes) {
if (propTypes.hasOwnProperty(key)) {
// Note that this does not support nested propTypes validation
// (arrayOf, objectOf, oneOfType and shape)
// You'd have to create special cases for those
output[key] = React.PropTypes[propTypes[key].type](propTypes[key].value);
}
}
return output;
}
var MyComponent = React.createClass({
propTypes: processPropTypes(myPropTypes),
static: {
myPropTypes: myPropTypes,
},
});
si potrebbe poi accedere al formato propTypes personalizzati tramite MyComponent.myPropTypes
o element.type.myPropTypes
.
Ecco un aiuto per rendere questo processo un po 'più semplice.
function applyPropTypes(myPropTypes, Component) {
Component.propTypes = processPropTypes(myPropTypes);
Component.myPropTypes = propTypes;
}
applyPropTypes(myPropTypes, MyComponent);
fonte
2016-03-07 09:27:31
Sarebbe anche molto interessante per essere programmaticamente in grado di leggere gli oggetti di scena predefinite utilizzando magari 'funzione getDefaultProps'. – Vadorequest