在React App中得到以下错误:
道具类型失败:提供给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中提到为字符串类型。 预先感谢!
答案 0 :(得分:1)
params
道具中的 react-router
是object
而非string
,因此您应该像PropTypes.object
那样使用它,或使用{ PropTypes.shape
Page.propTypes = {
match: PropTypes.shape({
params: PropTypes.object,
}).isRequired,
};
答案 1 :(得分:0)
Params是一个对象,因此您必须将其更改为PropTypes.object
或使用ID为此类的proptypes
Page.propTypes = {
match: PropTypes.shape({
id: PropTypes.string,
}).isRequired,
};
答案 2 :(得分:0)
看看您的代码,很明显match.params
不是字符串。无论您调用的是Page
组件,还是使用id
作为match.params.id
的对象,都将传递该对象类型。
const { id } = match.params;
您的propTypes
应该如下所示:
Page.propTypes = {
match: PropTypes.shape({
params: PropTypes.shape({
id: PropTypes.string,
}),
}).isRequired,
};
这将消除您遇到的错误。