2017-01-23 22 views
49

Tôi có một thành phần nhận được giá đỡ cho kích thước của nó. Giá đỡ có thể là một chuỗi hoặc một số cũ: "LARGE" hoặc 17.React PropTypes: Cho phép các loại PropTypes khác nhau cho một prop

Tôi có thể để React.PropTypes biết rằng điều này có thể là một hoặc khác trong xác thực propTypes không?

Nếu tôi không xác định loại tôi nhận được một cảnh báo:

prop type `size` is invalid; it must be a function, usually from React.PropTypes.

MyComponent.propTypes = { 
size: React.PropTypes 
} 

Trả lời

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

Tìm hiểu thêm: Typechecking With PropTypes

+0

Cảm ơn vì điều này, tôi nhận được các lỗi ngẫu nhiên khi chạy các kiểm tra Jest của tôi đặt các Proptypes tĩnh trong các lớp của tôi: 'ReferenceError: oneOfType không được định nghĩa' - bất kỳ đề xuất nào? Cảm ơn trước!! –

+0

là u chắc chắn bạn đã nhập khẩu chính xác 'import PropTypes từ 'prop-types';'? –

+0

hey there Pawel - vâng, đây là cách chúng ta nhập chúng: 'import PropTypes từ 'prop-types';' –

1
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 
+2

Có, PropTypes sống trong gói riêng của nó bây giờ, nhưng điều đó không trả lời câu hỏi ... –

1

Điều này có thể làm việc cho bạn:

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

Trong khi điều này mã có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và/hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó. – rollstuhlfahrer

Các vấn đề liên quan