Массив реквизитов React linter airbnb

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

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

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

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


person FacundoGFlores    schedule 20.01.2017    source источник
comment
Вопрос в том, что вы хотите изменить: проблему, которую пытается выделить предупреждение, или только само предупреждение? Если первое, то есть вы действительно хотите следовать рекомендациям, предложенным правилом eslint, ответ от @FacundoGFlores правильный, и вам следует сделать типы более конкретными. Если вас не волнует проблема, и вы просто хотите подавить предупреждение, просто отключите правило.   -  person Tomty    schedule 12.05.2020


Ответы (5)


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

SmartTable.propTypes = {
  name: React.PropTypes.string.isRequired,
  cols: React.PropTypes.arrayOf(React.PropTypes.string),
  rows: React.PropTypes.arrayOf(React.PropTypes.string),
};
person FacundoGFlores    schedule 20.01.2017
comment
Почему это не умно? В статически типизированных языках массивы объявляются с типом, который они содержат, например. string[] или MyObject[], так что имеет смысл указать React.PropTypes тип вашего массива. - person Brian; 20.01.2017
comment
Я думаю, что это очень умно, и это то, что я делаю. - person mcabe; 26.07.2019

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

Если вам нужны массивы:

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),
};
person JuzerK    schedule 08.08.2018

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

    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,
       })
};
person P-A    schedule 14.01.2019

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

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

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

person LRuby    schedule 09.07.2019

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

someVal: PropTypes.array, // eslint-disable-line
person Iryna Batvina    schedule 24.01.2020
comment
Это хорошее временное решение, хотя оно и не сработает для тех из нас, чьи клиенты запрещают это. К сожалению, есть причины для правил eslint. - person humans; 11.02.2021
comment
Не решает проблему - person James Klein; 05.05.2021