PropTypes 在 React 中不起作用

2024-01-09

我正在运行 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
        })
    ]

}

您可能会注意到,我传递了一个字符串(“Hello World”),但检查了 proptypes 中的函数。我没有收到 proptypes 的任何错误或警告,并且代码运行得很好。


按预期工作:

警告:失败的道具类型:无效的道具message类型的string供应给SimpleMessage, 预期的function.

请务必检查您的浏览器控制台,这是显示错误的地方。

https://codepen.io/anon/pen/paGYjm?editors=1111 https://codepen.io/anon/pen/paGYjm?editors=1111


Also :

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

source https://reactjs.org/docs/optimizing-performance.html#webpack

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PropTypes 在 React 中不起作用 的相关文章

随机推荐

  • 在 Swift 4 中将数据转换为 DispatchData

    我正在将一个项目迁移到 Swift 4 但我无法弄清楚应该如何使用新的 API s 在 Swift 4 中执行此操作 以下代码是旧的 Swift 3 方式 从函数中间开始 因此需要保护 let formattedString A strin
  • 为什么在我的字符串末尾添加换行符?

    我有一个小问题 我注意到 出于某种原因 当我使用 连接两个变量时 Python 自动使用换行符 for i in range o a Before readline b After readline if a b lines append
  • Django 模型无线电输入

    我正在尝试将单选按钮合并到我的表单中 在我的forms py我的表单有以下字段 class ProfileForm forms ModelForm class Meta model Profile fields first name las
  • 单击 Android 中的 URL 时会打开我的应用程序

    我定义了一个意图过滤器 以便从某些类型的 URL 启动我的应用程序 重点是它是针对所有类型的链接启动的 而我只想针对具体的主机名启动 这是我的清单
  • System.InvalidOperationException:集合已修改

    我在枚举队列时遇到以下异常 系统 InvalidOperationException 集合已修改 枚举 操作可能无法执行 这是代码摘录 1 private bool extractWriteActions out List
  • Kotlin 与正则表达式的拆分工作不符合预期

    我正在尝试将字符串拆分为 16 个字符长度的块 所以首先我创建长度为 64 的字符串 val data Some string data String format 64s data 然后我用正则表达式分割它 val nameArray d
  • 带有列表理解的python三元迭代

    三元迭代可以吗 我的意思是一个简单的版本 尽管这个特定的例子可以用更好的方式来完成 c 0 list1 4 6 7 3 4 5 3 4 c 1 if 4 i for i in list1 else 0 一个更实际的例子 strList Ul
  • 复制带有选中复选框的行

    我想将三张纸 肝脏 肺 和 肾脏 中选中复选框的行合并到一张 报告 中 我想抓取 A 列中不包含单词 sample 的行 当我将数据粘贴到 Report 中时 我想通过在其间添加一行 用相应的原始工作表名称来标记每组行 其中包含A 列中的工
  • 分步天气 API 教程 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在哪里可以找到有关某些 api 天气实现的良好分步教程 我对此很陌生 因此官方文档并不总是像我需要开始理解的那样清晰 您可以使用来自各个站
  • SessionFactory.getCurrentSession() 线程安全吗?

    通过获取 Hibernate 会话是否线程安全SessionFactory getCurrentSession 假设我有一个static SessionFactory用于我的整个应用程序的对象 并且我向我的 servlet 发出了 5 个并
  • TensorFlow 专家的混合体

    我想在 TensowFlow 上实现一个通用模块 它接收 TensorFlow 模型列表 此处表示为专家 并从中构建专家混合 如下图所示http www aclweb org anthology C16 1133 http www aclw
  • OpenIdConnect 错误 - 租户标识符可能不是空 GUID

    我正在尝试使用 OWIN Open ID Connect 中间件将 ASP NET 应用程序的身份验证外包给 Azure Active Directory 应用程序在访问需要授权的页面时成功重定向到 Azure AD 登录页面 但是 在登录
  • Windows下appcontainer进程和普通进程之间有ipc的方式吗?

    我正在尝试在 Windows 中的 appcontainer 进程和普通进程之间建立 ipc 我在Windows appcontainer中做了一个进程 感谢这个article https www malwaretech com 2015
  • MVVM:如何在控件上进行函数调用?

    在 XAML 中 我有一个带有 x Name of 的文本框MyTextBox
  • 当用户使用 jQuery 将表头滚动到视图之外时,表头保持固定在顶部

    我正在尝试设计一个 HTML 表格 其中当且仅当用户将其滚动到视图之外时 标题才会保留在页面顶部 例如 表格可能距离页面向下 500 像素 我该如何制作 以便如果用户将标题滚动到视图之外 浏览器以某种方式检测到它不再位于 Windows 视
  • c# 通过单击按钮停止线程

    如何通过单击按钮结束我的线程 我通过单击按钮开始我的线程 new Thread SampleFunction Start 和我的线程 void SampleFunction int i 0 while true string Seconds
  • Ruby 调试器在 STDIN 上失败。获取用户输入

    我相信您可以轻松重现该问题 只需使用新的 RubyMine 7 1 Mac 或 Windows 版本 Ruby 2 2 创建简单的脚本 puts Hi i m gonna break your debugger user input get
  • Android onKey 带虚拟键盘

    我使用 onKey 方法捕获键盘事件 按下 public boolean onKey View arg0 int arg1 KeyEvent arg2 do something return false 这对于物理键盘按下来说效果很好 但对
  • 从 Liquid 数组中获取下一个和上一个元素

    简洁版本 我想将 1 添加到液体模板中的数字并将结果用作数组索引 capture plus one 0 plus 1 endcapture div Value of plus one plus one div div This works
  • PropTypes 在 React 中不起作用

    我正在运行 React 16 2 0 并且正在使用 PropTypes 15 6 1 我正在使用 ES6 语法和 Webpack 我试图让 PropTypes 在传递无效道具时发出警告 但它不起作用 这是代码 SimpleMessage j