我正在运行React 16.2.0并且我正在使用PropTypes 15.6.1。我正在使用ES6语法和Webpack。
我试图让PropTypes在传递无效道具时抛出警告,但它不起作用。这是代码:
SimpleMessage.js
import React from "react"
import PropTypes from "prop-types"
class SimpleMessage extends React.Component {
render() {
return(
<p>{this.props.message}</p>
)
}
}
SimpleMessage.propTypes = {
message: PropTypes.func
}
export default SimpleMessage
index.js
import React from "react"
import ReactDOM from "react-dom"
import SimpleMessage from "./components/SimpleMessage"
window.React = React
ReactDOM.render(
<SimpleMessage message={"Hello World"} />,
document.getElementById("react-container")
)
webpack.config.js
var webpack = require("webpack")
var path = require("path")
process.noDeprecation = true
module.exports = {
entry: "./src/index.js",
output: {
path: path.join(__dirname, 'dist', 'assets'),
filename: "bundle.js",
sourceMapFilename: 'bundle.map'
},
devtool: '#source-map',
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules)/,
loader: 'babel-loader',
query: {
presets: ['env', 'stage-0', 'react']
}
},
{
test: /\.css$/,
use: ['style-loader','css-loader', {
loader: 'postcss-loader',
options: {
plugins: () => [require('autoprefixer')]
}}]
},
{
test: /\.scss/,
use: ['style-loader','css-loader', {
loader: 'postcss-loader',
options: {
plugins: () => [require('autoprefixer')]
}}, 'sass-loader']
}
]
},
plugins: [
new webpack.DefinePlugin({
"process.env": {
NODE_ENV: JSON.stringify("production")
}
}),
new webpack.optimize.UglifyJsPlugin({
sourceMap: true,
warnings: false,
mangle: false
})
]
}
你可能会注意到我传递了一个字符串(&#34; Hello World&#34;)但是检查了proptypes中的函数。我没有通过proptypes得到任何错误或警告,代码运行得很好。
答案 0 :(得分:1)
按预期工作:
警告:道具类型失败:提供给
message
的{{1}}类型的道具string
无效,预期为SimpleMessage
。
请务必检查浏览器控制台,这是显示错误的位置。
https://codepen.io/anon/pen/paGYjm?editors=1111
另外:
您不应将UglifyJsPlugin或DefinePlugin应用于&#39; production&#39;开发中的价值,因为它们会隐藏有用的React警告,并使构建更慢。
答案 1 :(得分:0)
这是因为您已将propType
定义为function
,但您将其作为string
发送。
将代码更改为message: PropTypes.string