React中使用TypeScript代替prop-types

原文鏈接

公眾號-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.pswp.cn/news/208139.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208139.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208139.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ArkTS快速入門

一、概述 ArkTS是鴻蒙生態的應用開發語言。它在保持TypeScript&#xff08;簡稱TS&#xff09;基本語法風格的基礎上&#xff0c;對TS的動態類型特性施加更嚴格的約束&#xff0c;引入靜態類型。同時&#xff0c;提供了聲明式UI、狀態管理等相應的能力&#xff0c;讓開發者可以…

深度學習基礎回顧

深度學習基礎 淺層網絡 VS 深層網絡深度學習常用的激活函數Sigmoid 函數ReLU 函數Softplus 函數tanh函數 歸納偏置CNN適用數據歸納偏置 RNN適用數據歸納偏置 淺層網絡 VS 深層網絡 淺層神經網絡參數過多&#xff0c;導致模型的復雜度和計算量很高&#xff0c;難以訓練。而深層…

Redisson的基礎使用(2)

布隆過濾器&#xff08;Bloom Filter&#xff09; 布隆過濾器一般用于解決緩存穿透的問題。主要原理是使用一組哈希函數&#xff0c;將元素映射成一組位數組中的索引位置。如果要檢查某個元素是否在集合中時&#xff0c;將此元素通過所有的哈希函數&#xff0c;查看哈希值對應的…

硬件開發筆記(十五):RK3568底板電路VGA顯示接口原理圖分析

若該文為原創文章&#xff0c;轉載請注明原文出處 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134849296 紅胖子網絡科技博文大全&#xff1a;開發技術集合&#xff08;包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬…

多態和繼承復習

與其明天開始&#xff0c;不如現在行動&#xff01; 文章目錄 多態多態成立的條件細節 繼承&#x1f48e;總結 多態 多態成立的條件 存在繼承關系或者實現關系子類重寫父類的方法父類引用指向子類對象 細節 通過父類的引用調用子類的對象 Animal animal new Dog();animal…

C語言搭建項目-學生管理系統(非鏈表)

、 目錄 搭建offer.h文件 搭建offer.c中的main函數 密碼登入系統 搭建my_oferr.c中的接口函數 使用幫助菜單接口函數 增加學生信息接口函數 查詢學生信息接口函數 刪除學生信息接口函數 保存學生信息接口 打開文件fopen 關閉文件fclose 判斷是否保存文件fwrite 退出執行文件…

C++:const類型數據的修改問題

在C語言中const類型的數據嚴格意義上可以修改&#xff1a; const int a1; int*b&a; *b2;不同于C語言&#xff0c;C中指針類型是要嚴格對應的&#xff0c;對const類型的數據必須使用const類型的指針進行接收&#xff0c;從而避免修改&#xff1b; 但問題是c中同樣支持指針的…

年度工作總結怎么寫?掌握這些年終總結萬能公式,讓你的報告出彩無比!

光陰似箭&#xff0c;日月如梭&#xff0c;時間總是不疾不徐地向前奔去&#xff0c;轉眼就來到了2023年的最后一個月&#xff0c;12月一到&#xff0c;上班族和打工人又要開始忙活工作總結的事情~ 工作總結&#xff0c;不僅是一年工作的回顧&#xff0c;更是未來規劃的起點。你…

Springboot中的RestTemplate

Springboot中的RestTemplate 在Spring Boot應用程序中&#xff0c;RestTemplate是一個用于進行HTTP請求的強大工具。通常用于與RESTful API進行交互、調用其他服務或執行HTTP請求。它提供了各種方法來發送HTTP請求&#xff08;如GET、POST、PUT、DELETE等&#xff09;&#xf…

cuda lib 線程安全的要義

1, 概述 cuda lib 線程安全的幾個多線程的情景&#xff1a; 單卡多線程&#xff1b; 多卡多線程-每卡單線程&#xff1b; 多卡多線程-每卡多線程&#xff1b; 需要考慮的問題&#xff1a; 每個 cublasHandle_t 只能有一個stream么&#xff1f; 每個cusolverHandle_t 只能有一…

python3.5安裝教程及環境配置,python3.7.2安裝與配置

大家好&#xff0c;小編來為大家解答以下問題&#xff0c;python3.5安裝教程及環境配置&#xff0c;python3.7.2安裝與配置&#xff0c;現在讓我們一起來看看吧&#xff01; python 從爬蟲開始&#xff08;一&#xff09; Python 簡介 首先簡介一下Python和爬蟲的關系與概念&am…

Android Studio的代碼筆記--IntentService學習

IntentService學習 IntentService常規用法清單注冊服務服務內容開啟服務 IntentService 一個 HandlerThread工作線程&#xff0c;通過Handler實現把消息加入消息隊列中等待執行&#xff0c;通過傳遞的intent在onHandleIntent中處理任務。&#xff08;多次調用會按順序執行事件…

Spring Cloud Alibaba實踐 --Sentinel

sentinel簡介 Sentinel的官方標題是&#xff1a;分布式系統的流量防衛兵。從名字上來看&#xff0c;很容易就能猜到它是用來作服務穩定性保障的。對于服務穩定性保障組件&#xff0c;如果熟悉Spring Cloud的用戶&#xff0c;第一反應應該就是Hystrix。但是比較可惜的是Netflix…

三防平板|手持終端PDA|8寸/10寸工業三防平板電腦主板方案定制

近年來&#xff0c;隨著科技的快速發展&#xff0c;三防平板成為了各行各業中不可或缺的工具。三防平板采用IP67級別的防護設計&#xff0c;通過了多項測試標準&#xff0c;如國標和美標&#xff0c;具備防水、防摔、防塵、防撞、防震、防跌落以及防鹽霧等多重防護功能。因此&a…

JavaScript 簡單理解原型和創建實例時 new 操作符的執行操作

function Person(){// 構造函數// 當函數創建&#xff0c;prototype 屬性指向一個原型對象時&#xff0c;在默認情況下&#xff0c;// 這個原型對象將會獲得一個 constructor 屬性&#xff0c;這個屬性是一個指針&#xff0c;指向 prototype 所在的函數對象。 } // 為原型對象添…

HarmonyOS應用開發工具DevEco Studio安裝與使用

語雀知識庫地址&#xff1a;語雀HarmonyOS知識庫 飛書知識庫地址&#xff1a;飛書HarmonyOS知識庫 知識庫內容逐步完善中… 工欲善其事必先利其器&#xff0c;要編寫HarmonyOS應用就需要用到官方提供的IDE工具來編寫相應的代碼。 在鴻蒙開發者官網&#xff0c;其提供了官方的開…

基于Java醫院掛號管理系統

基于Java醫院掛號管理系統 功能需求 1、患者信息管理&#xff1a;系統需要提供患者的基本信息錄入功能&#xff0c;包括姓名、性別、年齡、聯系方式等。此外&#xff0c;系統還應支持對患者信息進行修改、查詢和刪除的操作。 2、掛號管理&#xff1a;系統需要提供掛號功能&a…

高效的多維空間點索引算法——GeoHash

一、Geohash 算法簡介 GeoHash是空間索引的一種方式&#xff0c;其基本原理是將地球理解為一個二維平面&#xff0c;通過把二維的空間經緯度數據編碼為一個字符串&#xff0c;可以把平面遞歸分解成更小的子塊&#xff0c;每個子塊在一定經緯度范圍內擁有相同的編碼。以GeoHash方…

springboot 極簡案例

安裝idea File -> New Project 選擇依賴 創建controller文件 輸入controller類名 輸入代碼 運行項目 訪問 localhost:8080/hello/boot package com.example.demo;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.…

數據庫對象介紹與實踐:視圖、函數、存儲過程、觸發器和物化視圖

文章目錄 一、視圖&#xff08;View&#xff09;1、概念2、基本操作1&#xff09;創建視圖2&#xff09;修改視圖3&#xff09;刪除視圖4&#xff09;使用視圖 3、使用場景4、實踐 二、函數&#xff08;Function&#xff09;1、概念2、基本操作1&#xff09;創建函數2&#xff…