React中使用TypeScript代替prop-types

news/2024/11/14 20:14:34/

原文链接

公众号-React中使用TypeScript代替prop-types

个人公众号,呜呜呜,求各位大佬们关注下,本人的公众号主要写React 跟NodeJs的

​关于prop-types

对于部分的同学,不大了解为什么我们的代码里面要用到prop-types这个库,对此需要先解释下这个库的历史。

很久很久以前,React在出来的时候,在对组件处理的时候,对props进行了校验,比如一个计算数字的子组件,对props的要求是必须都为数字,而如果传入的不是数字,就很容易报错,因此我们需要在组件内对props进行校验。

基于上述环境,React对props进行了类型约束,就如同现在的TS一样,对每一个参数都规定了类型,但是到后来的时候,就觉得这个比较鸡肋,也为了让React这个库没那么大,所以就将其划分出来,作为一个专属库,名为prop-types

所以,在prop-types的库中,有了下面这么一个描述

PropTypes 最初是作为 React 核心模块的一部分公开的,并且是 通常与 React 组件一起使用。 用法

既然现在prop-types已经是一个单独的库了,那么我们就要将其安装到我们的项目中,不过由于prop-types只在开发环境中奏效,所以只需要install -D即可。

"prop-types": "^15.8.1",

ok,在安装过了prop-types之后,再将用法写在下面

import PropTypes from "prop-types";import { PureComponent } from "react";
class CPropsComponent extends PureComponent {static PropTypes = {propStr: PropTypes.string,propNum: PropTypes.number,};render() {const { propStr, propNum } = this.props;return (<><span>str:{propStr}</span><br /><span>number:{propNum}</span><br /></>);}
}
export default CPropsComponent;


这样子,当我们传入两个参数的时候,就可以做出类型校验了。
但是呢,大人!!!!现在已经是2023年了,typescript已经不是加分项,而是必须项了!!!

Typescript的代替

前面提及到了,prop-types的作用是为了校验我们的props的类型!!这样子,我们就不得不提起一个牛逼的兄弟–Typescript。

我想大家都应该明白为啥一向严谨的我,在写prop-types的时候连一个效果展示图都不补贴出来了吧。。因为实在没必要。

接下来贴上一段用Typescript代替的代码

interface PropComponentProps {propStr: string;propNum: number;
}
​
​
function PropsComponent(props: PropComponentProps) {const { propStr = "", propNum = 0 } = props;return (<><span>str:{propStr}</span><br /><span>number:{propNum}</span><br /><span>numObj</span></>);
}
export default PropsComponent;


简单明了。。

最后再贴上一份关于类组件的代码,也只是设置了component的props类型而已,请看第二行开始

import { PureComponent } from "react";
class CPropsComponent extends PureComponent<{propNum: number;propStr: string;
}> {render() {const { propStr, propNum } = this.props;return (<><span>str:{propStr}</span><br /><span>number:{propNum}</span><br /></>);}
}
export default CPropsComponent;

最后的叮嘱

其实,从prop-types的库只有js,就可以知道已经属于开始废弃了。

大人,时代变了,已经是属于TS的时代了。不信?React的文档是这么写的

我们建议使用 TypeScript 而不是在运行时检查 prop 类型。


http://www.ppmy.cn/news/1262429.html

相关文章

UE5 - 把ArchvizExplorer项目改造成自己的数字孪生项目 - 开发记要

参考&#xff1a; https://blog.csdn.net/qq_17523181/article/details/133853099 https://blog.csdn.net/qq_17523181/article/details/134455597 1. 安装项目 https://www.unrealengine.com/marketplace/zh-CN/product/archviz-explorer https://karldetroit.com/archviz-exp…

Go语言初始化数组的六种方式

介绍 在Go语言中&#xff0c;有多种方式可以初始化数组&#xff0c;本文将介绍初始化数组的六种方法。 方式1&#xff1a;指定数组大小并初始化 var array [3]int [3]int{1, 2, 3}指定数组的大小为3&#xff0c;并初始化为指定的值1, 2, 3。 方式2&#xff1a;根据初始化值…

使用 nnUNetv2 的一些踩坑记录(或许还会有继续更新

nnUNet 依然是最鲁棒的分割网络。今年初原作者更新了 nnUNet 的第二版即 nnUNetv2&#xff0c;题主近期试用的时候有一些踩坑的地方进行记录。 没有官方提供的预训练权重 官方文档在一个非常不起眼的角落提及了&#xff0c;v2版本尚无预训练权重可直接使用&#xff0c;有相关…

Golang使用Swagger文档教程

Golang开发效率是杠杠滴&#xff0c;简单几行代码就可完成一个可用的服务&#xff0c;如下代码&#xff1a; 采用Gin作为web framework采用Gorm作为持久化ORM采用Swagger作为OpenAPI文档管理工具 package mainimport ("encoding/csv""fmt""os"…

波奇学C++:function包装器和智能指针(一)

function包装器 相当于适配器&#xff0c;用于对可调用对象&#xff08;函数指针&#xff0c;仿函数&#xff0c;lambda&#xff09;进行封装&#xff0c;使得他们的类型统一。 double func(double d) {return d / 4; } struct func1 {double operator()(double d){return d …

ElasticSearch 谈谈你对段合并的策略思想的认识

段合并是Elasticsearch中的一个重要概念&#xff0c;它在数据索引和查询过程中起着关键的作用。Elasticsearch使用Lucene作为其全文搜索库&#xff0c;Lucene中使用的数据结构就是段&#xff08;Segment&#xff09;合并。 段合并的策略思想主要体现在以下几个方面&#xff1a…

dll动态链接库【C#】

1说明&#xff1a; 在C#中&#xff0c;dll是添加 【类库】生成的。 2添加C#的dll&#xff1a; &#xff08;1&#xff09;在VS中新建一个Windows应用程序项目&#xff0c;并命名为TransferDll。 &#xff08;2&#xff09;打开Windows窗体设计器&#xff0c;从工具箱中为窗体…

Python中读写(解析)JSON文件的深入探究

目录 一、引言 二、如何读取JSON文件 三、如何写入JSON文件 四、如何解析JSON字符串 五、错误处理和异常处理 六、使用第三方库提高效率 七、总结 一、引言 在Python中&#xff0c;我们经常使用JSON&#xff08;JavaScript Object Notation&#xff09;格式来存储和传输…