Javascript PropTypes不';我不在办公室工作

Javascript PropTypes不';我不在办公室工作,javascript,reactjs,react-proptypes,Javascript,Reactjs,React Proptypes,我运行的是React 16.2.0,我使用的是PropTypes 15.6.1。我正在使用ES6语法和网页包 我试图让道具类型在我传递无效道具时抛出警告,但它不起作用。代码如下: SimpleMessage.js import React from "react" import PropTypes from "prop-types" class SimpleMessage extends React.Component { render() { return(

我运行的是React 16.2.0,我使用的是PropTypes 15.6.1。我正在使用ES6语法和网页包

我试图让道具类型在我传递无效道具时抛出警告,但它不起作用。代码如下:

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
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")
)
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
        })
    ]

}

正如您可能注意到的,我正在传递一个字符串(“Hello World”),但正在检查proptypes中的函数。我没有收到propType的任何错误或警告,代码运行正常。

这是因为您将
propType
定义为
函数
,但将其作为
字符串发送

将代码更改为
消息:PropTypes.string
按预期工作:

警告:失败的道具类型:提供给
SimpleMessage
字符串类型的无效道具
消息
,应为
功能

确保检查浏览器控制台,这是显示错误的地方


此外:

您不应该在开发中应用具有“production”值的UglifyJsPlugin或DefinePlugin,因为它们会隐藏有用的React警告,并使构建速度慢得多


尝试删除
window.React=React
我尝试过,但没有任何更改。请确保您的浏览器控制台配置为显示警告级别,您可能有一个过滤器。在“默认级别”设置信息中,如果您在
渲染()中执行
控制台。错误('test')
,则警告和错误已被检查。它是否工作正常?编辑为错误,道具类型实际上抛出了一个错误。是的,我知道我必须检查浏览器控制台。我的浏览器没有显示本地运行的代码的任何警告。我在你的代码笔示例中看到了警告。你认为这是我的机器上的proptypes配置问题吗?如果你
console.error
你的控制台中有什么东西,你看到了吗?是的。阅读问题下的评论,看看我试图做什么。尝试将NODE_ENV设置为development,我认为在生产中不会显示任何内容。如果我删除webpack.DefinePlugin{…},它最终会显示道具类型错误!非常感谢。我的问题是,PropTypes不会发出警告,但它应该发出警告。