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
}

Jawaban:


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

Pelajari lebih lanjut: Mengecek dengan PropTypes


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' ]),
]),

11

Ini mungkin bekerja untuk Anda:

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

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

16
Ya, PropTypes hidup dalam paketnya sendiri sekarang, tetapi itu tidak menjawab pertanyaan ...
Kevin Amiranoff

1
Sama sekali tidak relevan dengan pertanyaan
jalooc
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.