问题前提:
react组件在头上引入了import React, {PropTypes} from ‘react’;
但是在下边进行属性检查的时候提示没有string这个属性。
为这问题折腾了很久,记录一下。原来是React版本的差异,造成前后一些不兼容的地方
1.问题代码
import classNames from 'classnames';
import React, {PropTypes} from 'react';
// 无状态函数式组件
function Button(props) {
const cssclasses = classNames('Button', props.className);
return props.href
? <a {...props} className={cssclasses} />
: <button {...props} className={cssclasses} />;
}
console.log(PropTypes);
Button.propTypes = {
href: PropTypes.string,
};
2. 错误原因分析
坑人的地方
原来人React从V15.5版本就不支持PorpTypes属性了,改到了prop-types里
检查自己的react版本
查看自己工程的node_modules里的react包,查看package.json,发现版本是V16.3.1
"_id": "react@16.3.1"
怪不得老是提示没有string属性。
3. 解决方案
按照官方解决办法:
1)下载prop-types包
npm install --save-dev prop-types
2)修改代码如下
import classNames from 'classnames';
import React from 'react';
import PropTypes from 'prop-types';
// 无状态函数式组件
function Button(props) {
const cssclasses = classNames('Button', props.className); // 将Button.css中定义的Button样式,无论如何都要给Button组件加上。这一句的意思是拼接class里的多个样式
return props.href
? <a {...props} className={cssclasses} />
: <button {...props} className={cssclasses} />;
}
console.log(PropTypes);
Button.propTypes = {
href: PropTypes.string,
};
在运行就正常了