React Props校验中如何定义支持字符串与HTML标签的propType
PropTypes校验失败原因
你当前的写法存在两处错误,导致校验规则不生效:
- PropTypes的API为小驼峰命名,
oneOfType首字母无需大写,你写的OneOfType是不存在的无效校验规则 - 不需要用
PropTypes.shape(PropTypes.object)匹配React元素,PropTypes内置了专门的校验类型处理这类场景,用shape包裹object的写法无法正确匹配React元素结构。
正确校验规则
直接替换为以下写法即可消除警告,同时不会放宽校验约束,也不需要使用any类型绕过规则:
TextField.propTypes = { label: PropTypes.oneOfType([ PropTypes.string, PropTypes.element ]).isRequired, };
规则说明
PropTypes.string:匹配所有字符串类型的label传值PropTypes.element:匹配所有合法React元素,覆盖你需要的<span>这类原生HTML对象、自定义组件实例等React节点场景- 如果后续需要支持传入字符串、React元素、Fragment、数字等所有React可渲染内容,可以把
PropTypes.element替换为PropTypes.node,当前需求下使用element即可精准匹配要求的两类值。
内容的提问来源于stack exchange,提问作者A. KUMAR
相关产品推荐
相关产品推荐

