成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:說說如何在React項(xiàng)目中應(yīng)用TypeScript

開發(fā) 項(xiàng)目管理
單獨(dú)的使用typescript 并不會導(dǎo)致學(xué)習(xí)成本很高,但是絕大部分前端開發(fā)者的項(xiàng)目都是依賴于框架的。

 [[423684]]

一、前言

單獨(dú)的使用typescript 并不會導(dǎo)致學(xué)習(xí)成本很高,但是絕大部分前端開發(fā)者的項(xiàng)目都是依賴于框架的

例如和vue、react 這些框架結(jié)合使用的時候,會有一定的門檻

使用 TypeScript 編寫 react 代碼,除了需要 typescript 這個庫之外,還需要安裝@types/react、@types/react-dom

  1. npm i @types/react -s 
  2.  
  3. npm i @types/react-dom -s 

至于上述使用@types的庫的原因在于,目前非常多的javascript庫并沒有提供自己關(guān)于 TypeScript 的聲明文件

所以,ts并不知道這些庫的類型以及對應(yīng)導(dǎo)出的內(nèi)容,這里@types實(shí)際就是社區(qū)中的DefinitelyTyped庫,定義了目前市面上絕大多數(shù)的JavaScript庫的聲明

所以下載相關(guān)的javascript對應(yīng)的@types聲明時,就能夠使用使用該庫對應(yīng)的類型定義

二、使用方式

在編寫react項(xiàng)目的時候,最常見的使用的組件就是:

  • 無狀態(tài)組件
  • 有狀態(tài)組件
  • 受控組件

無狀態(tài)組件

主要作用是用于展示UI,如果使用js聲明,則如下所示:

  1. import * as React from 'react' 
  2.  
  3. export const Logo = props => { 
  4.     const { logo, className, alt } = props 
  5.  
  6.     return ( 
  7.         <img src={logo} className={className} alt={alt} /> 
  8.     ) 

但這時候ts會出現(xiàn)報(bào)錯提示,原因在于沒有定義porps類型,這時候就可以使用interface接口去定義porps即可,如下:

  1. import * as React from 'react' 
  2.  
  3. interface IProps { 
  4.     logo?: string 
  5.     className?: string 
  6.     alt?: string 
  7.  
  8. export const Logo = (props: IProps) => { 
  9.     const { logo, className, alt } = props 
  10.  
  11.     return ( 
  12.         <img src={logo} className={className} alt={alt} /> 
  13.     ) 

但是我們都知道props里面存在children屬性,我們不可能每個porps接口里面定義多一個children,如下:

  1. interface IProps { 
  2.     logo?: string 
  3.     className?: string 
  4.     alt?: string 
  5.     children?: ReactNode 

更加規(guī)范的寫法是使用React里面定義好的FC屬性,里面已經(jīng)定義好children類型,如下:

  1. export const Logo: React.FC<IProps> = props => { 
  2.     const { logo, className, alt } = props 
  3.  
  4.     return ( 
  5.         <img src={logo} className={className} alt={alt} /> 
  6.     ) 
  • React.FC顯式地定義了返回類型,其他方式是隱式推導(dǎo)的
  • React.FC對靜態(tài)屬性:displayName、propTypes、defaultProps提供了類型檢查和自動補(bǔ)全
  • React.FC為children提供了隱式的類型(ReactElement | null)

有狀態(tài)組件

可以是一個類組件且存在props和state屬性

如果使用typescript聲明則如下所示:

  1. import * as React from 'react' 
  2.  
  3. interface IProps { 
  4.   color: string, 
  5.   size?: string, 
  6. interface IState { 
  7.   count: number, 
  8. class App extends React.Component<IProps, IState> { 
  9.   public state = { 
  10.     count: 1, 
  11.   } 
  12.   public render () { 
  13.     return ( 
  14.       <div>Hello world</div> 
  15.     ) 
  16.   } 

上述通過泛型對props、state進(jìn)行類型定義,然后在使用的時候就可以在編譯器中獲取更好的智能提示

關(guān)于Component泛型類的定義,可以參考下 React 的類型定義文件 node_modules/@types/react/index.d.ts,如下所示:

  1. class Component<P, S> { 
  2.  
  3.     readonly props: Readonly<{ children?: ReactNode }> & Readonly<P>; 
  4.  
  5.     state: Readonly<S>; 

從上述可以看到,state屬性也定義了可讀類型,目的是為了防止直接調(diào)用this.state更新狀態(tài)

受控組件

受控組件的特性在于元素的內(nèi)容通過組件的狀態(tài)state進(jìn)行控制

由于組件內(nèi)部的事件是合成事件,不等同于原生事件,

例如一個input組件修改內(nèi)部的狀態(tài),常見的定義的時候如下所示:

  1. private updateValue(e: React.ChangeEvent<HTMLInputElement>) { 
  2.     this.setState({ itemText: e.target.value }) 

常用Event 事件對象類型:

  • ClipboardEvent 剪貼板事件對象
  • DragEvent 拖拽事件對象
  • ChangeEvent Change 事件對象
  • KeyboardEvent 鍵盤事件對象
  • MouseEvent 鼠標(biāo)事件對象
  • TouchEvent 觸摸事件對象
  • WheelEvent 滾輪事件對象
  • AnimationEvent 動畫事件對象
  • TransitionEvent 過渡事件對象
  • T接收一個DOM 元素類型

三、總結(jié)

上述只是簡單的在react項(xiàng)目使用typescript,但在編寫react項(xiàng)目的時候,還存在hooks、默認(rèn)參數(shù)、以及store等等......

typescript在框架中使用的學(xué)習(xí)成本相對會更高,需要不斷編寫才能熟練

參考文獻(xiàn)

https://juejin.cn/post/6952696734078369828

https://juejin.cn/post/6844903684422254606

 

責(zé)任編輯:武曉燕 來源: JS每日一題
相關(guān)推薦

2021-09-15 07:56:32

TypeScriptVue項(xiàng)目

2021-08-03 07:51:43

React項(xiàng)目面試

2021-07-07 08:36:45

React應(yīng)用場景

2021-06-29 09:47:34

ReactSetState機(jī)制

2021-06-30 07:19:36

React事件機(jī)制

2025-04-01 00:00:00

項(xiàng)目CRUD單例模式

2021-09-06 10:51:27

TypeScriptJavaScript

2021-08-02 08:34:20

React性能優(yōu)化

2021-05-20 08:34:03

CDN原理網(wǎng)絡(luò)

2021-09-10 06:50:03

TypeScript裝飾器應(yīng)用

2024-09-24 16:30:46

分布式鎖Redis數(shù)據(jù)中間件

2021-09-08 07:49:34

TypeScript 泛型場景

2024-03-05 10:33:39

AOPSpring編程

2024-08-22 10:39:50

@Async注解代理

2024-05-30 08:04:20

Netty核心組件架構(gòu)

2024-09-25 17:44:08

2021-05-31 10:35:34

TCPWebSocket協(xié)議

2024-02-29 16:49:20

volatileJava并發(fā)編程

2021-07-30 07:47:36

DOMReactJsx

2025-04-08 00:00:00

@AsyncSpring異步
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久不卡 | 亚洲国产视频一区二区 | 亚洲第一av | 久久国产欧美日韩精品 | 91精品国产综合久久婷婷香蕉 | 国产日韩一区二区三免费高清 | 99久久国产免费 | 欧美极品视频在线观看 | 污书屋 | 国产在线视频在线观看 | 在线观看免费观看在线91 | 91看片网| 亚洲免费视频播放 | 草樱av | 精品国产18久久久久久二百 | 亚洲成人精品国产 | 国产视频在线一区二区 | 永久网站| 成人av一区 | 中文字幕在线观看一区 | 正在播放国产精品 | 欧美毛片免费观看 | 免费人成在线观看网站 | 在线免费国产视频 | 精产国产伦理一二三区 | av一区二区三区四区 | 亚洲欧美少妇 | 成人在线国产 | 99久久婷婷国产综合精品电影 | 色一级 | 国产一级片一区二区三区 | 日韩成人精品在线 | 天天草夜夜骑 | 麻豆国产一区二区三区四区 | 毛片免费视频 | 国产精品日日摸夜夜添夜夜av | 成人精品在线观看 | 国产亚洲日本精品 | 久久久综合久久 | 欧美激情视频一区二区三区在线播放 | 午夜在线电影网 |