Bereaksi PropTip: Izinkan berbagai jenis PropTip untuk satu prop

244

Saya memiliki komponen yang menerima penyangga untuk ukurannya. Penyangga dapat berupa string atau angka ex: "LARGE"atau 17.

Dapatkah saya memberi tahu React.PropTypes tahu bahwa ini dapat berupa salah satu atau yang lain dalam validasi propTypes?

Jika saya tidak menentukan jenisnya saya mendapat peringatan: prop type `size` is invalid; it must be a function, usually from React.PropTypes.

MyComponent.propTypes = {
    size: React.PropTypes
}
Kevin Amiranoff
sumber

Jawaban:

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

Pelajari lebih lanjut: Mengecek dengan PropTypes

Paweł Andruszków
sumber
Terima kasih untuk ini, saya mendapatkan kesalahan acak ketika menjalankan tes Jest saya menetapkan Proptypes statis di kelas saya: ReferenceError: oneOfType is not defined- ada saran? Terima kasih sebelumnya!!
Sara Inés Calderón
Anda yakin sudah mengimpor dengan benar import PropTypes from 'prop-types';?
Paweł Andruszków
hei ada Pawel - ya, ini cara kami mengimpornya:import PropTypes from 'prop-types';
Sara Inés Calderón
1
2019 - gunakan PropTypes.oneOf
Imdad
26

Untuk tujuan dokumentasi, lebih baik untuk membuat daftar nilai string yang legal:

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

Ini mungkin bekerja untuk Anda:

height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
CorrinaB
sumber
1
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan meningkatkan nilai jangka panjangnya.
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
Michael
sumber
16
Ya, PropTypes hidup dalam paketnya sendiri sekarang, tetapi itu tidak menjawab pertanyaan ...
Kevin Amiranoff
1
Sama sekali tidak relevan dengan pertanyaan
jalooc