React PropTypes: อนุญาตให้ PropTypes ประเภทต่าง ๆ สำหรับหนึ่งเสา


244

ฉันมีส่วนประกอบที่รับเสาสำหรับขนาดของมัน เสาสามารถเป็นได้ทั้งสตริงหรืออดีตจำนวน: หรือ"LARGE"17

ฉันสามารถให้ React.PropTypes รู้ได้หรือไม่ว่าการตรวจสอบนี้เป็นแบบใดแบบหนึ่งหรือแบบอื่นในการตรวจสอบความถูกต้องของ 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


ขอบคุณสำหรับสิ่งนี้ฉันได้รับข้อผิดพลาดแบบสุ่มเมื่อรันการทดสอบ Jest ของฉันการตั้งค่า Proptypes แบบคงที่ในชั้นเรียนของฉัน: ReferenceError: oneOfType is not defined- ข้อเสนอแนะใด ๆ ? ขอบคุณล่วงหน้า!!
Sara InésCalderón

คุณแน่ใจหรือว่าคุณนำเข้าอย่างถูกต้องimport PropTypes from 'prop-types';?
PawełAndruszków

เฮ้ที่นั่น Pawel - ใช่นี่คือวิธีที่เรานำเข้าพวกเขา:import PropTypes from 'prop-types';
Sara InésCalderón

1
2019 - การใช้ PropTypes.oneOf
Imdad

26

เพื่อวัตถุประสงค์ในเอกสารเราควรแสดงรายการค่าสตริงที่ถูกกฎหมาย:

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

11

สิ่งนี้อาจใช้ได้กับคุณ:

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

1
ในขณะที่รหัสนี้อาจตอบคำถาม แต่มีบริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีการที่รหัสนี้ตอบคำถามช่วยปรับปรุงมูลค่าระยะยาว
rollstuhlfahrer

-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 อาศัยอยู่ในแพ็คเกจของตัวเองตอนนี้ แต่นั่นไม่ได้ตอบคำถาม ...
Kevin Amiranoff

1
ไม่เกี่ยวข้องกับคำถามโดย
สิ้นเชิง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.