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, как я могу его изменить?

Ответ 1

Возможное решение для этого (но я думаю, что это не разумно):

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

Ответ 2

Одно из решений, которое сработало для меня:

Если вы хотите массивы:

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),
};

Ответ 3

Если массив столбцов и строк - это объекты, мне нравится использовать форму, чтобы она могла выглядеть примерно так.

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

};

Ответ 4

Короткие версии:

для массива PropTypes.shape([])

для объекта PropTypes.shape({})