Реактор линтер airbnb массив прототипов

У меня есть следующее PropTypes:

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

но линтер говорит мне:

Prop type array is forbiddenкак я могу это изменить?

6 ответов

Решение

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

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

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

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

};

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

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

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

Я обнаружил, что это также жизнеспособный способ обойти запрещенную ошибку массива.

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

Просто добавьте комментарий eslint-disable-line

someVal: PropTypes.array, // eslint-disable-line
Другие вопросы по тегам