2015-12-15 11 views
15

मैं दृढ़ता से प्रतिक्रिया घटकों का परीक्षण करना चाहता हूं। उपयोगकर्ता एक फॉर्म का उपयोग कर घटक के प्रोप को बदल सकता है। मैं React.PropTypes.oneOf(['green', 'blue', 'yellow']) पर आधारित <select> प्रस्तुत करने के लिए (उदाहरण के लिए) सक्षम होना चाहता हूं।निकालें/पढ़ें प्रोप टाइप

जब मैं MyComponent.propTypes पढ़ता हूं तो यह प्रतिक्रिया द्वारा परिभाषित एक फ़ंक्शन देता है। प्रोप प्रकार निकालने/पढ़ने का कोई तरीका है?

+0

यह भी सच प्रोग्राम के शायद 'getDefaultProps' समारोह का उपयोग कर डिफ़ॉल्ट रंगमंच की सामग्री को पढ़ने के लिए सक्षम होने के लिए दिलचस्प होगा की जाँच करें। – Vadorequest

उत्तर

7

आप नहीं सीधे propTypes से के बाद से, जैसा कि आप ने कहा कि पढ़ सकते हैं, वे परिभाषित कर रहे हैं कार्यों के रूप में।

आप इसके बजाय अपने प्रोपटाइप को मध्यस्थ प्रारूप में परिभाषित कर सकते हैं, जिससे आप अपना 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, 
    }, 
}); 

फिर आप MyComponent.myPropTypes या element.type.myPropTypes के माध्यम से अपने कस्टम propTypes प्रारूप का उपयोग कर सकते हैं।

इस प्रक्रिया को थोड़ा आसान बनाने के लिए यहां एक सहायक है।

function applyPropTypes(myPropTypes, Component) { 
    Component.propTypes = processPropTypes(myPropTypes); 
    Component.myPropTypes = propTypes; 
} 

applyPropTypes(myPropTypes, MyComponent); 
+0

मैं उम्मीद कर रहा था कि मध्यस्थ कदम आवश्यक नहीं था, लेकिन हां, यह स्पष्ट, आसान और रखरखाव योग्य है, तो क्यों नहीं ... धन्यवाद। – GijsjanB

+2

मेरी इच्छा है कि एक बेहतर तरीका था। हमने वास्तव में मेरी टीम में से एक के बारे में सोचा और हम इसे आजमाएंगे। यदि यह बेहतर है तो मैं यहां एक प्रतिक्रिया दूंगा। – Vadorequest

+0

@ वाडोरक्वेट क्या आप समाधान के साथ आ सकते हैं? –

2

शायद आप जो करने की कोशिश कर रहे हैं उसका एक कोड उदाहरण जोड़ना क्योंकि मुझे समझ में नहीं आता है लेकिन आप प्रोप टाइप्स क्यों एक्सेस कर रहे हैं? PropTypes में मूल्य नहीं होते हैं बल्कि घटक में पारित विभिन्न प्रोपों के लिए आपके मूल्य प्रकारों की अपेक्षाओं की अपेक्षाएं होती हैं।

यदि आपके पास कोई ऐसा फॉर्म है जो आपको प्रोप को बदलने देता है तो मुझे लगता है कि आप घटक में प्रोप में गुजर रहे हैं जो चयन घटक को प्रस्तुत करेगा। आप प्रोप ऑब्जेक्ट के माध्यम से इन प्रोपों तक पहुंच सकते हैं।

आप propTypes निम्नलिखित इस्तेमाल किया जा सकता विभिन्न प्रकार के रूप में हो सकता है कि मान्य करने के लिए कोशिश कर रहे हैं:

optionalUnion: React.PropTypes.oneOfType([ 
    React.PropTypes.string, 
    React.PropTypes.number, 
    React.PropTypes.instanceOf(Message) 
]) 
+1

वह घटक के गुणों को अंतिम उपयोगकर्ता को प्रदर्शित करने के लिए गतिशील रूप से एक प्रतिक्रिया घटक के निर्धारित 'propTypes' को प्रदर्शित करना चाहता है। दस्तावेज उद्देश्य के लिए मैं वास्तव में ऐसा करना चाहता हूं। – Vadorequest

+0

बिल्कुल! हाल ही में इस पर ध्यान नहीं दिया है या फिर इसे और अधिक शोध किया है। – GijsjanB

संबंधित मुद्दे