Неудачный тип реквизита: Недопустимый реквизит `match.params` типа` объект`, переданный в `Page`, ожидаемая` строка` - PullRequest
0 голосов
/ 27 сентября 2018

Ошибка получения ниже в приложении React: Сбой типа проп: Недопустимый проп match.params типа object, предоставленный Page, ожидаемый string.

Ниже приведен мой фрагмент кода:

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

const Page = ({ match }) => {
  const { id } = match.params;

  return (
    <div>
      <h1>Page {id}</h1>
    </div>
  );
};

Page.propTypes = {
  match: PropTypes.shape({
    params: PropTypes.string,
  }).isRequired,
};
export default Page;

Может кто-нибудь предложить, где я делаю ошибку, поскольку match.params уже упоминается как тип строки в PropType.Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

params из react-router реквизитов - это object, а не string, и, следовательно, вы должны использовать его как PropTypes.object или указать точную форму, используя PropTypes.shape

Page.propTypes = {
  match: PropTypes.shape({
    params: PropTypes.object,
  }).isRequired,
};
0 голосов
/ 27 сентября 2018

Глядя на ваш код, становится ясно, что match.params не является строкой.Это тип объекта, который вы передаете от того места, где вы назвали компонент Page, и вы используете id как match.params.id.

const { id } = match.params;

Ваш propTypes должен выглядеть следующим образом:

Page.propTypes = {
    match: PropTypes.shape({
    params: PropTypes.shape({
        id: PropTypes.string,
    }),
  }).isRequired,
};

Это устранит полученную ошибку.

0 голосов
/ 27 сентября 2018

Params - это объект, поэтому вы должны изменить его на PropTypes.object или использовать проптипы с таким идентификатором

Page.propTypes = {
  match: PropTypes.shape({
    id: PropTypes.string,
  }).isRequired,
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...