react 项目,在生产环境去掉 propTypes 检查代码,打包时自动去除

React PropTypes废止与prop-types包演进解析 PropTypes是React中用于运行时props类型校验的基础机制,其原理是通过纯函数校验器在组件创建阶段验证传入属性的类型与结构。这一机制虽不参与渲染逻辑,却对开发期健壮性、错误可追溯性和团队协作规范具有关键价值。随着React架构演进,官方将其从核心包剥离为独立的prop-types包,体现了模块解耦、开发/运行时分离及渐进式升级的工程哲学。该变更直接影响组件开发工作流、CI集成策略及TypeScript协同方案,也成为react面试题中高频考察的底层设计意识点。 阅读详情

关于PropTypes

  1. PropTypes包含一整套验证器,可用于确保你接收的数据是有效的。
  2. 能帮助我们在开发的时候及时发现问题。
  3. 没有propTypes定义,组件依然能够正常工作,而且,即使在propTypes检查出错的情况下,组件依然能工作。
  4. propTypes只是一个辅助开发的功能,并不会改变组件的行为。

为了验证propTypes的作用,故意违反propTypes规则即可。在项目react-full-stack-learning的分支todo_controlled_component,将todos下的reducer.js的初始值的第一项text改成一个数字10000,如下:

const initialState = [
    {
        text: 10000,
        completed: false,
        id: 0
    },
    {
        text: 'welcome to react and redux learning',
        completed: false,
        id: 1
    }
];

npm start之后,在打开的浏览器控制台会显示如下警告,说明propTypes类型检查已经生效。

Warning: Failed prop type: Invalid prop `text` of type `number` supplied to `TodoItem`, expected `string`.
    in TodoItem (at todoList.js:14)
    in TodoList (created by Connect(TodoList))
    in Connect(TodoList) (at todos.js:12)
    in div (at todos.js:10)
    in Unknown (at TodoApp.js:8)
    in div (at TodoApp.js:7)
    in TodoApp (at src/index.js:10)
    in Provider (at src/index.js:9)

要不要在打包时移除PropTypes代码?

npm run build之后,将编译打包之后的build目录发布到nginx,打开页面查看,并没有如预期中的警告提示。是不是说明在打包的时候已经做了处理了呢?

个人认为,只要打包部署之后,这些代码没有被执行,影响不大,可不必在意。唯一需要考虑的问题就是打包之后的 js 文件大小的问题了。

因为打包之后,并没有看到警告提示,所以,相关的代码是不是已经被移除了呢?因为没有仔细对比,不敢妄下结论。猜测,create-react-app 已经做了优化,见页尾 create-react-app 关于 propTypes 的 Issue。

如果这部分代码特别多,需要考虑应用在移动端的响应速度,就需要考虑在发布打包的时候移除这部分代码。

那么,有没有办法在软件发布的时候,把这些propTypes检查自动去掉呢?答案是肯定的。可以用这个插件解决:babel-plugin-transform-react-remove-prop-types

扩展阅读

使用 PropTypes 进行类型检查

关于项目发布至生产环境时,去掉propTypes检查的问题,create-react-app项目有一个Issue:Removing propTypes in production build?

关于作者

babel-plugin-transform-react-remove-prop-types:从生产版本中删除不必要的React propTypes babel插件转换React删除道具类型 从生产版本中删除不必要的React propTypes。 安装 npm install --save-dev babel-plugin-transform-react-remove-prop-types 问题解决了 从生产版本中删除React propTypes ,因为它们仅在开发中使用。 您可以通过删除带宽来节省带宽。 例 在 const Baz = ( props ) => ( < div> ); Baz . propTypes = { className : PropTypes . string }; 出 const Baz = ( props ) => ( < div> ); 带有注释注释 默认情况下,此插件应解决大多数情况。 在某些情况下,例如,当使用HOC(高阶组件)时,例如react-redux的connect或组件继承(),可以在propTypes定义之后使用注释强制删除: Component . propTypes /* remove-propt 立即下载

相关推荐

向NCBI上传16S rDNA数据的操作详解

专门介绍向NCBI上传16S rDNA数据的方法不太多。因为自己有上传数据的需要,所以决定边摸索边写下操作流程。如果这篇博文交代了上传步骤以及一些描述文件属性的书写,帮到你的话,还请点赞收藏。

yue81560的博客 2万+

react项目里关闭Eslint规范校检

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>state各不干扰</title> </head> <body> &l

kilig 2305

2023-10-20 - MacBook - 优化外接2k显示器体验:告别字小与字虚的终极指南

本文针对MacBook外接2K显示器时普遍遇到的字体过小和边缘发虚问题,提供了终极解决方案。通过深入解析macOS的HiDPI与Retina显示原理,并详细指导使用SwitchResX等工具开启隐藏的HiDPI模式,实现完美的2倍整数缩放,从而在保证字体大小合适的同时获得清晰锐利的显示效果,彻底告别字小与字虚的困扰。

solidity8miner的博客 476

react项目取消部分eslint检查

// eslint-disable-next-line

徐同保的专栏 2389

Oracle数据库RMAN异机恢复保姆级教程,按照步骤来操作,一次就成功!

本文深入解析RMAN异机恢复四大核心场景(演练、数据恢复、故障应急、测试环境搭建),提供从备份到验证的完整步骤和实战脚本。包含RAC到单机迁移技巧、路径调整、常见报错解决方案,助你彻底掌握数据库恢复的“救命技能”。DBA必备干货,强烈推荐

Jackyimi的博客 940

Nvidia Orin Driveos Camera 介绍及调试详解

自动驾驶-nvidia orin driveos Camera 驱动详解及调试

u011803281的博客 2992

react—— 类型检查prop-types

类型检查 1,注意: React.PropTypes 自 React v15.5 起已弃用。请使用 prop-types 库代替。 import PropTypes from 'prop-types'; class Greeting extends React.Component { render() { return ( &amp;lt;h1&amp;gt;Hello, {this.p...

abc的博客 332

【工具插件类教学】Unity翻书效果插件Book-Page Curl Pro教程

特征: • 从左到右和从右到左翻页 • 与画布缩放器 配合使用 • 可配置的自动翻转脚本 • 支持向页面 添加 UI 元素 • 支持透明页面 • 适用于“世界空间”画布

纯技术流日常开发商业开发记录总结等 3674

LFM2.5-Encoder-230M在15种语言上的表现:跨语言NLP任务的终极解决方案

LFM2.5-Encoder-230M是一款轻量级的多语言双向编码器,基于LFM2架构构建,专为满足严格的延迟和内存预算而设计,却能在性能上超越其尺寸级别。作为HuggingFace镜像项目中的重要成员,它在跨语言自然语言处理任务中展现出卓越的能力,为开发者和研究人员提供了高效且强大的工具。 ## 多语言能力的核心优势 LFM2.5-Encoder-230M的显著特点之一是其强大的多语言支持。

gitblog_00096的博客 415

Dify平台隐患url:/console/api/remote-files/upload暴露高危漏洞,配置nginx htpasswd模块认证机制屏蔽解决

内部网络探测: 攻击者可通过SSRF扫描内网服务云元数据访问: 可能访问AWS/Aliyun/腾讯云等元数据服务服务端请求伪造: 以服务器身份发起任意HTTP请求。

CN_Eden 1318

使用 IMDb API 获取电影评分和评论的 Python 爬虫

电影是人们娱乐生活中的重要组成部分,随着电影产业的快速发展,观众对电影的评价也越来越多样化。IMDb(互联网电影数据库)作为全球最大的电影评分和评论平台之一,收录了成千上万部电影、电视节目及其相关数据。它提供了一个强大的 API 接口,允许开发者访问电影的评分、评论、演员信息等数据。本文将带你一步一步实现一个 Python 爬虫,使用 IMDb API 获取电影的评分和评论。我们将通过这个爬虫来分析一些热门电影的观众反馈,并可视化分析结果。

2201_76125261的博客 1055

react项目太大,打包速度很慢和经常打包失败的解决方案

一、解决打包慢的问题 1、使用插件:hard-source-webpack-plugin npm install hard-source-webpack-plugin 或 yarn add hard-source-webpack-plugin 2、在webpack的配置文件中使用 const HardSourceWebpackPlugin = require('hard-source-webpack-plugin'); module.exports = { // ...... plugins:

qq_28013889的博客 4136

Spring Boot Jar包加密实战:用ClassFinal与Jasypt打造代码安全堡垒

Spring Boot代码加密与配置保护方案 针对Spring Boot项目源码和配置易被反编译的风险,本文提出ClassFinal字节码加密+Jasypt配置加密的组合方案。ClassFinal通过Maven插件对核心代码加密,运行时需JavaAgent加载,反编译后仅保留空方法体;Jasypt则采用强加密算法保护敏感配置。方案优势包括: 双重保护:ClassFinal加密业务逻辑,Jasypt加密数据库密码等配置 灵活部署:支持密码启动、机器绑定等安全策略 平滑集成:兼容Spring生态,动态解密结合配

墨夶的博客 1092

React把PropTypes放到一个独立包

PropTypes的代码从React中分离出来了,放在一个独立的npm包prop-types里。 以前,要做PropTypes检查,代码是这样(方法一)。 import React from 'react'; SomeComponent.propTypes = { foo: React.PropTypes.string }; 或者下面这样(方法二)。 import React, ...

weixin_40660221的博客 463

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

关于react项目当中propTypes应该在生产环境中去掉的做法

我们都知道,在react项目当中state和prop是常用的属性,state是组件内部的状态,而prop是外部传递给组件的数据。对于对props的属性校验,一般会引入propTypes。 首先我先大致说一下propTypes检查。在react中既然props是组件的对外接口,那么就应该以某种方式让组件声明自己的接口规范。react通过propTypes来支持这个功能,来约束这个组...

jackTesla的博客 1699

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

React 的 PropTypes

在 React 中,prop 是从外部传递给组件的数据,可以说是组件对外的一个接口属性,它也是应该有对应的规范的,比方说: 这个组件支持哪些 prop 每个 prop 应该是怎么样的格式 而 React 是通过 propTypes 用来规范 prop 必须满足某种规格,如下所示: export default class MyComponent extends Component { //...

FritzXu的博客 1386

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

如何使用react-immutable-proptypes优化React应用的高效验证

`react-immutable-proptypes`是一个专为React应用设计的高效验证库,它能够与Immutable.js无缝集成,提供强大的PropType验证功能。对于使用Immutable.js管理状态的React项目,这个库可以帮助开发者更轻松地验证组件属性,确保数据类型的正确性,提升应用的稳定性和可维护性。 ## 为什么需要react-immutable-proptypes?

gitblog_00033的博客 488

从TypeScript到PropTypes:简化React组件类型转换的利器

从TypeScript到PropTypes:简化React组件类型转换的利器 项目介绍 在现代前端开发中,TypeScript和React已经成为许多开发者的首选组合。然而,TypeScript的类型系统与React的PropTypes之间存在一定的转换成本,尤其是在大型项目中,手动维护这两者的同步可能会变得繁琐且容易出错。为了解决这一问题,babel-plugin-typescript-to-p...

gitblog_00170的博客 1033

babel-plugin-flow-react-proptypes 项目教程

babel-plugin-flow-react-proptypes 项目教程 1. 项目的目录结构及介绍 babel-plugin-flow-react-proptypes/ ├── fixtures/ ├── src/ ├── .babelrc ├── .flowconfig ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├──...

gitblog_00122的博客 403

什么是React的propTypes:深入理解组件类型校验机制与实战指南

propTypes是React中用于对组件props进行类型校验的机制,能在开发阶段及早发现类型错误,提升组件健壮性与可维护性。本文从基本概念、核心作用、使用方法、验证类型、默认值配置、工作原理与最佳实践等维度系统讲解propTypes的价值,帮助开发者构建更可靠的React应用。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1331

react-redux-typescript-guide技术栈对比:TypeScript vs Flow vs PropTypes

在React开发中,类型检查是保证代码质量和稳定性的重要手段。你是否还在为选择合适的类型检查工具而烦恼?本文将深入对比TypeScript、Flow和PropTypes三种主流方案,帮助你根据项目需求做出最佳选择。读完本文,你将了解它们的核心特性、使用场景和性能表现,轻松掌握React项目的类型安全方案。 ## 技术选型对比表格 | 特性 | TypeScript | Flow | PropT...

gitblog_01080的博客 970

react 的propTypes 的取消

所以,最好的方式是,开发者在代码中定义propTypes,在开发过程中避免犯错,但是在发布代码时,用一种自动的方式将propTypes去掉,这样在产品环境代码会更优。现有的babel-react-optimize就具有这个功能,可以通过npm安装,但是应该确保只在发布产品代码时使用它。 ...

风华绝代的博客 501

Airbnb 的 PropTypes 工具库:React 属性验证的终极指南

想要让你的 React 应用更加健壮可靠吗?Airbnb 的 PropTypes 工具库为你提供了一套完整的解决方案!🚀 这个强大的工具库包含了超过 30 种自定义 PropTypes 验证器,能够帮助你构建更安全、更可维护的 React 组件。 ## 什么是 PropTypes 工具库? PropTypes 工具库是 Airbnb 团队开发的一套自定义 React PropTypes 验证

gitblog_00808的博客 427

prop-types迁移指南:从React.PropTypes到独立包的完整流程

你是否还在使用React.PropTypes?随着React 15.5.0的发布,React团队将PropTypes从核心包中分离出来,成为了独立的prop-types包。这份终极指南将为你提供从React.PropTypes到prop-types的完整迁移方案,确保你的React应用保持最佳性能!🚀 ## 为什么要迁移到prop-types? **prop-types**是React生态中

gitblog_00914的博客 632

Babel 插件:从 Flow 类型声明生成 React PropTypes 定义

Babel 插件:从 Flow 类型声明生成 React PropTypes 定义 项目基础介绍 babel-plugin-flow-react-proptypes 是一个开源项目,旨在帮助开发者从 Flow 类型声明自动生成 React PropTypes 定义。该项目主要使用 JavaScript 编程语言开发,是 Babel 插件体系的一部分。通过此插件,开发者可以节省编写 PropType...

gitblog_00771的博客 645

React的类型检测PropTypes

React.propTypes:React.PropTypes提供很多验证器来验证传入数据的有效性,当向props传入无效数据时,JavaScript 控制台会抛出警告。 var data = 123; class MyTitle extends React.Component { static propTypes = { title: PropTypes.stri...

weixin_33895516的博客 111
上一篇: React+Redux工程目录结构,最佳实践
下一篇: react开发,日常经验汇总
uncleAndyChen
博客等级 码龄22年 32粉丝 57原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值