在Airbnb ESLint规范下如何声明组件多参数的PropTypes?
问题
组件代码如下:
组件声明:
export default function Labyrinth({ theme = 1 }, { inverted = 0 }) {
PropTypes定义:
Labyrinth.propTypes = { inverted: PropTypes.bool.isRequired, theme: PropTypes.oneOf([1, 2, 3]).isRequired, }
触发ESLint错误:'inverted' PropType is defined but prop is never used(eslintreact/no-unused-prop-types),代码可正常运行,但该错误存在。
原因
inverted是组件的第二个参数(React函数组件的第二个参数为上下文参数),并非组件接收的props,但你在propTypes中将其作为props声明,ESLint检测到props列表里没有这个属性被使用,因此抛出错误。
解决办法
移除错误的PropTypes声明:如果
inverted确实不是组件props,直接从propTypes里删掉它:Labyrinth.propTypes = { theme: PropTypes.oneOf([1, 2, 3]).isRequired, }调整参数结构(如果
inverted应该是props):如果inverted本来就该作为props传入,把它移到第一个props对象中,这样PropTypes的声明就匹配了:// 修改组件声明 export default function Labyrinth({ theme = 1, inverted = 0 }) { // 正常使用inverted } // PropTypes保持不变 Labyrinth.propTypes = { inverted: PropTypes.bool.isRequired, theme: PropTypes.oneOf([1, 2, 3]).isRequired, }临时禁用ESLint规则(不推荐):如果必须保留当前代码结构,可在对应行添加注释禁用规则:
Labyrinth.propTypes = { inverted: PropTypes.bool.isRequired, // eslint-disable-line react/no-unused-prop-types theme: PropTypes.oneOf([1, 2, 3]).isRequired, }注意:这种方法会掩盖真正的未使用props问题,仅作为临时方案。
内容的提问来源于stack exchange,提问作者Diego Alonzo
相关产品推荐
相关产品推荐

