Проверка свойств ReactJS

Я перехожу от ReactJs к React-Native и обнаружил эту структуру функции в коде facebook для кнопки реагирования:

class Button extends React.Component<{
  title: string,
  onPress: () => any,
  color?: ?string,
  hasTVPreferredFocus?: ?boolean,
  accessibilityLabel?: ?string,
  disabled?: ?boolean,
  testID?: ?string,
}> {
  static propTypes = {
    /**
     * Text to display inside the button
     */
    title: PropTypes.string.isRequired,
    /**
     * Text to display for blindness accessibility features
     */
    accessibilityLabel: PropTypes.string,
    /**
     * Color of the text (iOS), or background color of the button (Android)
     */
    color: ColorPropType,
    /**
     * If true, disable all interactions for this component.
     */
    disabled: PropTypes.bool,
    /**
     * TV preferred focus (see documentation for the View component).
     */
    hasTVPreferredFocus: PropTypes.bool,
    /**
     * Handler to be called when the user taps the button
     */
    onPress: PropTypes.func.isRequired,
    /**
     * Used to locate this view in end-to-end tests.
     */
    testID: PropTypes.string,
  };

  ...
}

В ReactJS я просто собирал свои компоненты с проверкой propTypes, поэтому:

a) Какова цель помещения спецификации props в скобки в определении класса (<{...}>? Доступно ли это также в обычном ReactJS?

б) Будет ли это проверять переданный формат свойств? Если да, то зачем мне здесь propTypes?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
0
131
2

Ответы 2

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

В частности, этот синтаксис выглядит как Поток, но Машинопись также является популярным вариантом для проверки типов.

Так:

  • Общий используется для проверки типа с использованием вашего компонента во время компиляции. Это синтаксис, специфичный для средств проверки типов, и он недоступен в обычном JS.
  • propTypes используется для проверки типов во время выполнения, чтобы улучшить DX для людей, которые не используют систему типов.

Как правило, проекты с системами типов предпочитают использовать общий тип только для уменьшения многословности. Если вы используете систему типов, propTypes действительно нужен только в том случае, если вы публикуете компонент.

Facebook использует Поток (вы можете увидеть комментарии в верхней части исходного кода) для статического анализа. Вы можете использовать Typescript или любой другой анализатор. Основная цель определения типов props - предотвратить ошибки программирования. Узнать больше здесь

Компонент React принимает 2 общих параметрыReact.Component<PropType, context> {}.

  1. Типы опор
  2. Контекст

Также React.Component имеет некоторые статические свойства, такие как

  1. propTypes, который определяет, какие реквизиты может принимать этот компонент.
  2. defaultProps определяет значения свойств по умолчанию, если они не передаются от родителя.

Переходя к вашему вопросу:

What is the purpose of having the props specification inside the brackets at the class definition <{...}>?

Чтобы определить, какие свойства может принимать компонент, для статического анализа и создания отчетов об ошибках для требуемых свойств, если они не переданы.

Is this available also in normal ReactJS?

Да (вам нужно будет добавить в свой проект Flow или TypeScript)

Will that check the passed properties format. If so, why do I need propTypes here??

Да, в некоторых случаях, когда тип свойств не может быть определен во время компиляции, было бы полезно увидеть любые предупреждения, сгенерированные при использовании propTypes. Кредит

Другие вопросы по теме