我想将字符串从Main传递给Header。它成功但警告。我是React的初学者,所以我无法弄清it must be a function
的含义。
任何人都知道如何解决此警告?
警告是:
我的代码如下:
Main.js
import React from 'react';
import Header from './Header';
import AppList from './AppList/AppList';
import Footer from './Footer';
const propTypes = {
mainInfo: React.PropTypes.shape({
title: React.PropTypes.string.isRequired,
apps: React.PropTypes.array.isRequired,
}),
};
class Main extends React.Component {
static methodsAreOk() {
return true;
}
render() {
return (
<div>
<Header title={this.props.mainInfo.title} />
<AppList apps={this.props.mainInfo.apps} />
<Footer />
</div>
);
}
}
Main.propTypes = propTypes;
export default Main;
Header.js
import React from 'react';
const propTypes = {
title: React.PropTypes.string.isRequred,
};
class Header extends React.Component {
static methodsAreOk() {
return true;
}
render() {
return (
<div className="header">
<h1>{this.props.title}</h1>
</div>
);
}
}
Header.propTypes = propTypes;
export default Header;
答案 0 :(得分:99)
您有错误:React.PropTypes.string.isRequred
。正确拼写isRequired
,它应该没问题。
答案 1 :(得分:19)
当您的PropType实际为undefined
时会发生这种情况。
在我的情况下,我指定了一个PropTypes.integer
的propType,它不是一个proptypes列表。字面上变成了undefined
。相反,我应该使用PropTypes.number
。
答案 2 :(得分:4)
此外,它是bool
的布尔值。我浏览了文档并遇到了完全相同的问题,直到我回去仔细阅读它们。
https://facebook.github.io/react/docs/typechecking-with-proptypes.html
答案 3 :(得分:2)
e.g。
React.PropTypes.sting
React.PropTypes.text
React也可以告诉用户:“你定义的PropType'sting'是未定义的。你拼错了吗?。可用的PropTypes是:string,number,bool等。”
答案 4 :(得分:1)
通过3个步骤解决问题的简便方法:
npm prop-types install
); 代码: import PropTypes from 'prop-types';
React
关键字(例如:React.PropTypes.string.isRequired to PropTypes.string.isRequired
取决于您的陈述,因此只需删除React
关键字,因为您现在从 prop-types 导入,而不是从React库导入。答案 5 :(得分:1)
我也遇到过这个问题,我花了很多时间来修复它!
所以,只需记笔记!
如果有拼写错误!
```JSX
TestModal.propTypes = {
title: PropTypes.string,
//badHideModal: PropTypes.func.required,
hideModal: PropTypes.func.isRequired,
};
```
答案 6 :(得分:0)
发生了类似于isRequred
而不是isRequired
的事情。我正在尝试定义默认道具,但复制粘贴了propTypes且从未更改名称,所以最终得到了这样的内容:
import PropTypes from 'prop-types'
const Main = ({ title }) => // whatever
Main.propTypes = {
title: PropTypes.string
}
Main.propTypes = { // this should have been Main.defaultProps! ?♂️
title: 'This is the default title!'
}
因此PropTypes抱怨title
的prop类型不正确。上面写着“它必须是一个函数,通常来自React.PropTypes,但它是一个字符串”。
我以为我快疯了。我正在查看第一个Main.propTypes
,并试图查找错别字或任何可能出错的内容,但是如您所见,这完全没问题。我打开了多个定义了道具类型但没有引发错误的文件。
我显然在看错地方,但最终发现它很不幸。我很幸运能真正找到它。这些令人难以置信的bug很难弄清,因为它们就像魔术师一样,一只手在吸引另一只眼睛的同时移动另一只眼睛,通常是在清晰的视野中。
答案 7 :(得分:0)
就我而言,它是在我声明Component.propTypes
并在其下声明时发生的,而不是写Component.defaultProps
而不是再次写Component.propTypes
来指定默认值。