Главная Категории Контакты Поиск

React Proptypes

Как использовать проверку типов в React.

React ·21.03.2019·читать 2 мин 🤓·Автор: Alex Myzgin

Поскольку JavaScript является динамически типизированным языком, у нас нет способа принудительно применить тип переменной во время компиляции.

Flow и TypeScript очень помогают в данном случае, но React сам может помочь с типизацией props, а инструменты (редакторы, линтеры) могут помочь обнаружить, когда мы передаем неправильные значения еще перед запуском кода:

import PropTypes from "prop-types";
import React from "react";

class BlogPost extends React.Component {
  render() {
    return (
      <div>
        <h1>{this.props.title}</h1>
        <p>{this.props.description}</p>
      </div>
    );
  }
}

BlogPost.propTypes = {
  title: PropTypes.string,
  description: PropTypes.string
};

export default BlogPost;

Какие типы мы можем использовать

Основные типы:

  • PropTypes.array
  • PropTypes.bool
  • PropTypes.func
  • PropTypes.number
  • PropTypes.object
  • PropTypes.string
  • PropTypes.symbol

Мы можем указать один из двух типов:

PropTypes.oneOfType([
  PropTypes.string,
  PropTypes.number
]),

Мы можем указать одно из многих значений:

PropTypes.oneOf(['Test1', 'Test2']),

Мы можем указать экземпляр класса:

PropTypes.instanceOf(Something);

Мы можем указать любой React node (всё что React может отобразить): числа, строки, элементы или массив (фрагмент).

PropTypes.node;

Или вообще любой тип:

PropTypes.any;

Массивы имеют специальный синтаксис, который мы можем использовать для принятия массива определенного типа:

PropTypes.arrayOf(PropTypes.string);

Объект принимает определенную форму:

PropTypes.shape({
  color: PropTypes.string,
  fontSize: PropTypes.number
});

Свойсто isRequired

Добавление isRequired к любому параметру PropTypes приведет к тому, что React вернет ошибку, если это свойство отсутствует, так как делает его обязательным:

PropTypes.arrayOf(PropTypes.string).isRequired,
PropTypes.string.isRequired,

Website, name & logo
Copyright © 2019. Alex Myzgin