प्रतिक्रिया PropTypes: एक प्रोप के लिए विभिन्न प्रकार के PropTypes की अनुमति दें


244

मेरे पास एक घटक है जो इसके आकार के लिए एक प्रोप प्राप्त करता है। प्रोप या तो एक स्ट्रिंग या संख्या पूर्व हो सकता है: "LARGE"या 17

क्या मैं React.PropTypes को बता सकता हूं कि यह प्रोप्राइटेस सत्यापन में एक या दूसरे हो सकते हैं?

यदि मुझे उस प्रकार को निर्दिष्ट नहीं किया जाता है जो मुझे चेतावनी मिलती है: prop type `size` is invalid; it must be a function, usually from React.PropTypes.

MyComponent.propTypes = {
    size: React.PropTypes
}

जवाबों:


572
size: PropTypes.oneOfType([
  PropTypes.string,
  PropTypes.number
]),

और जानें: PropTypes के साथ टंकण


इसके लिए धन्यवाद, मुझे मेरी कक्षाओं में स्थैतिक प्रस्तावों की स्थापना करते हुए मेरे जेस्ट परीक्षण चलाने पर यादृच्छिक त्रुटियां हो रही हैं: ReferenceError: oneOfType is not defined- कोई सुझाव? अग्रिम में धन्यवाद!!
सारा ऐस कैल्डरॉन

क्या आप सुनिश्चित हैं कि आपने सही तरीके से आयात किया है import PropTypes from 'prop-types';?
Paweł Andruszków

हे पावेल - हाँ, यह है कि हम उन्हें कैसे आयात करते हैं:import PropTypes from 'prop-types';
सारा इनेस कैल्डरोन

1
2019 - उपयोग PropTypes.oneOf
इमदाद

26

प्रलेखन उद्देश्य के लिए, स्ट्रिंग मानों को सूचीबद्ध करना बेहतर है जो कानूनी हैं:

size: PropTypes.oneOfType([
    PropTypes.number,
    PropTypes.oneOf([ 'SMALL', 'LARGE' ]),
]),

11

यह आपके लिए काम कर सकता है:

height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),

1
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह कोड क्यों और / या इस प्रश्न के उत्तर के बारे में अतिरिक्त संदर्भ प्रदान करता है, इसके दीर्घकालिक मूल्य में सुधार करता है।
रोलस्टुफ़्लोरहेयर

-4
import React from 'react';              <--as normal
import PropTypes from 'prop-types';     <--add this as a second line

    App.propTypes = {
        monkey: PropTypes.string,           <--omit "React."
        cat: PropTypes.number.isRequired    <--omit "React."
    };

    Wrong:  React.PropTypes.string
    Right:  PropTypes.string

16
हां, PropTypes अब अपने पैकेज में रहता है, लेकिन यह सवाल का जवाब नहीं देता है ...
केविन अमीरनऑफ

1
सवाल के लिए पूरी तरह से प्रासंगिक नहीं है
jalooc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.