React中用PropTypes.oneOfType校验string或undefined是否正确?
关于PropTypes校验productTag属性的写法纠正
嘿,你的写法其实是有问题的哦!
直接把undefined放进PropTypes.oneOfType的数组里是不生效的——因为PropTypes.oneOfType只接受PropTypes提供的校验器函数(比如PropTypes.string、PropTypes.number这类),裸写的undefined并不是一个合法的校验器,PropTypes会直接忽略它,相当于你只写了PropTypes.string的校验,但写法本身不规范,容易让人误解。
正确的写法有两种:
1. 简洁推荐写法
如果只是允许string类型或undefined,其实直接用PropTypes.string就足够了——因为默认情况下,未添加isRequired的prop本身就允许不传(也就是值为undefined):
import React from 'react'; import PropTypes from 'prop-types'; Product.propTypes = { productTag: PropTypes.string, }; Product.defaultProps = { productTag: undefined };
2. 显式声明允许undefined的写法(可选)
如果你想要更明确地标注该prop可以接受undefined,可以用PropTypes.oneOf([undefined])来把undefined声明为合法值,放进oneOfType数组:
Product.propTypes = { productTag: PropTypes.oneOfType([ PropTypes.string, PropTypes.oneOf([undefined]) ]), }; Product.defaultProps = { productTag: undefined };
另外补充一句:你设置的defaultProps是没问题的,显式把默认值设为undefined可以让代码意图更清晰,和不设置defaultProps的效果一致(因为React默认会把未传入的prop设为undefined)。
内容的提问来源于stack exchange,提问作者Daniel Smith
相关产品推荐
相关产品推荐

