Проверка свойств реквизита в React

Я могу указать протипы classes в простом компоненте React NewButton.

import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';

const styles = () => ({
  button: {
    display: 'inline-flex',
  },
});

function NewButton(props) {
  const { classes } = props;

  return <Button className = {classes.button} variant = "outlined" />;
}

NewButton.propTypes = {
  classes: PropTypes.shape({}).isRequired,
};

export default withStyles(styles)(NewButton);

Но я получил ошибку 'classes.button' is missing in props validation eslint(react/prop-types) от eslint-плагин-реагировать.

Как правильно указать протипы classes.button?

Какое конкретно предупреждение вы получаете для propTypes?

adlopez15 10.07.2019 06:47

Я добавил конкретное сообщение об ошибке в свой исходный пост.

Hamkuu Shaw 10.07.2019 06:51

Какую версию реакции вы используете? Эта ошибка появлялась до 7.12.3

adlopez15 10.07.2019 06:57

Я использую eslint-plugin-react, v7.14.2.

Hamkuu Shaw 10.07.2019 07:42

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

keikai 07.02.2020 03:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
5
710
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я думаю, что вы ищете что-то вроде этого:

NewButton.propTypes = {
  classes: PropTypes.shape({
    button: PropTypes.shape({
      display: PropTypes.string.isRequired
    })
  }).isRequired,
};

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

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

То же самое относится и к объекту темы Material UI — он массивный, и вы определенно не захотите определять эту форму в каждом компоненте, который использует весь свой объект темы (просто чтобы успокоить eslint)

Это может показаться неприятным, но я обнаружил, что есть компромиссы. Весь смысл PropTypes (для меня) заключается в том, чтобы определить ожидаемые свойства для потребителей этого файла. classes это определяется самим файлом.

Как насчет определения propTypes для объекта классов, чтобы он принимал любую внутреннюю структуру?

NewButton.propTypes = {
    classes: PropTypes.objectOf(PropTypes.any).isRequired,
};

Таким образом, вам не нужно менять правила линтинга.

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