反应 linter airbnb proptypes 数组

React linter airbnb proptypes array

我有以下 PropTypes:

SmartTable.propTypes = {
  name: React.PropTypes.string.isRequired,
  cols: React.PropTypes.array.isRequired,
  rows: React.PropTypes.array.isRequired,
};

但是 linter 说我:

Prop type "array" is forbidden,如何更改?

一个可能的解决方案(但我认为这并不聪明):

SmartTable.propTypes = {
  name: React.PropTypes.string.isRequired,
  cols: React.PropTypes.arrayOf(React.PropTypes.string),
  rows: React.PropTypes.arrayOf(React.PropTypes.string),
};

对我有用的解决方案之一:

如果你想要数组:

SmartTable.propTypes = {
  name: PropTypes.string.isRequired,
  cols: PropTypes.instanceOf(Array),
  rows: PropTypes.instanceOf(Array),
};

对于对象和数组,可以是:

SmartTable.propTypes = {
  name: PropTypes.string.isRequired,
  cols: PropTypes.instanceOf(Object),
  rows: PropTypes.instanceOf(Array),
};

如果 cols 和 rows 的数组是我喜欢使用形状的对象,那么它可能是这样的。

    SmartTable.propTypes = {
      name: PropTypes.string.isRequired,
      cols: PropTypes.arrayOf(PropTypes.shape({
        id: PropTypes.string.isRequired,
        value: PropTypes.string,
       })
      rows: PropTypes.arrayOf(PropTypes.shape({
        id: PropTypes.string.isRequired,
        value: PropTypes.string,
       })
};

简短版本:

对于数组 PropTypes.shape([])

对于对象 PropTypes.shape({})

只需添加注释 eslint-disable-line

someVal: PropTypes.array, // eslint-disable-line

我也找到了另一种方法来绕过数组禁止错误:

PropTypes.arrayOf(PropTypes.any.isRequired).isRequired