日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
面試官:說說如何在React項目中應用TypeScript

 [[423684]]

一、前言

單獨的使用typescript 并不會導致學習成本很高,但是絕大部分前端開發(fā)者的項目都是依賴于框架的

10年積累的成都網(wǎng)站設計、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設公司經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先做網(wǎng)站后付款的網(wǎng)站建設流程,更有景泰免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

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

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

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

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

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

所以下載相關的javascript對應的@types聲明時,就能夠使用使用該庫對應的類型定義

二、使用方式

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

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

無狀態(tài)組件

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

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

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

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

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

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

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

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

有狀態(tài)組件

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

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

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

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

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

 
 
 
 
  1. class Component {
  2.     readonly props: Readonly<{ children?: ReactNode }> & Readonly

    ;

  3.     state: Readonly;

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

受控組件

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

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

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

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

常用Event 事件對象類型:

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

三、總結(jié)

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

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


文章題目:面試官:說說如何在React項目中應用TypeScript
當前路徑:http://www.5511xx.com/article/coghdjj.html