欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React項目中應用TypeScript的實現(xiàn)

 更新時間:2021年09月17日 09:32:51   作者:喆星高照  
TypeScript通常都會依賴于框架,例如和vue、react 這些框架結合,本文就主要介紹了React項目中應用TypeScript的實現(xiàn),分享給大家,具體如下:

一、前言

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

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

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

npm i @types/react -s
npm i @types/react-dom -s

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

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

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

二、使用方式

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

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

無狀態(tài)組件

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

import * as React from 'react'

export const Logo = props => {
    const { logo, className, alt } = props

    return (
        <img src={logo} className={className} alt={alt} />
    )
}

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

import * as React from 'react'

interface IProps {
    logo?: string
    className?: string
    alt?: string
}

export const Logo = (props: IProps) => {
    const { logo, className, alt } = props

    return (
        <img src={logo} className={className} alt={alt} />
    )
}

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

interface IProps {
    logo?: string
    className?: string
    alt?: string
    children?: ReactNode
}

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

export const Logo: React.FC<IProps> = props => {
    const { logo, className, alt } = props

    return (
        <img src={logo} className={className} alt={alt} />
    )
}

  • React.FC顯式地定義了返回類型,其他方式是隱式推導的
  • React.FC對靜態(tài)屬性:displayName、propTypes、defaultProps提供了類型檢查和自動補全
  • React.FC為children提供了隱式的類型(ReactElement | null)

有狀態(tài)組件

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

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

import * as React from 'react'

interface IProps {
  color: string,
  size?: string,
}
interface IState {
  count: number,
}
class App extends React.Component<IProps, IState> {
  public state = {
    count: 1,
  }
  public render () {
    return (
      <div>Hello world</div>
    )
  }
}

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

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

class Component<P, S> {

    readonly props: Readonly<{ children?: ReactNode }> & Readonly<P>;

    state: Readonly<S>;

}

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

受控組件

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

由于組件內部的事件是合成事件,不等同于原生事件,

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

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

常用Event 事件對象類型:

  • ClipboardEvent<T = Element> 剪貼板事件對象
  • DragEvent<T = Element> 拖拽事件對象
  • ChangeEvent<T = Element>  Change 事件對象
  • KeyboardEvent<T = Element> 鍵盤事件對象
  • MouseEvent<T = Element> 鼠標事件對象
  • TouchEvent<T = Element>  觸摸事件對象
  • WheelEvent<T = Element> 滾輪事件對象
  • AnimationEvent<T = Element> 動畫事件對象
  • TransitionEvent<T = Element> 過渡事件對象

T接收一個DOM 元素類型

三、總結

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

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

到此這篇關于React項目中應用TypeScript的實現(xiàn)的文章就介紹到這了,更多相關React項目應用TypeScript 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 簡析React Native startReactApplication 方法

    簡析React Native startReactApplication 方法

    這篇文章主要介紹了React Native startReactApplication 方法簡析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • react 下拉框內容回顯的實現(xiàn)思路

    react 下拉框內容回顯的實現(xiàn)思路

    這篇文章主要介紹了react 下拉框內容回顯,實現(xiàn)思路是通過將下拉框選項的value和label一起存儲到state中, 初始化表單數(shù)據(jù)時將faqType對應的label查找出來并設置到Form.Item中,最后修改useEffect,需要的朋友可以參考下
    2024-05-05
  • 淺談React + Webpack 構建打包優(yōu)化

    淺談React + Webpack 構建打包優(yōu)化

    本篇文章主要介紹了淺談React + Webpack 構建打包優(yōu)化,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • react-router-dom v6版本跳轉路徑的實現(xiàn)方法

    react-router-dom v6版本跳轉路徑的實現(xiàn)方法

    這篇文章主要介紹了react-router-dom v6版本跳轉路徑的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • React?Refs?的使用forwardRef?源碼示例解析

    React?Refs?的使用forwardRef?源碼示例解析

    這篇文章主要為大家介紹了React?之?Refs?的使用和?forwardRef?的源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 在react中使用windicss的問題

    在react中使用windicss的問題

    這篇文章主要介紹了在react中使用windicss的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • React路由管理之React Router總結

    React路由管理之React Router總結

    React項目通常都有很多的URL需要管理,最常使用的解決方案就是React Router了,本篇文章主要介紹了React路由管理之React Router總結,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • react國際化react-intl的使用

    react國際化react-intl的使用

    這篇文章主要介紹了react國際化react-intl的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • React?Suspense前后端IO異步操作處理

    React?Suspense前后端IO異步操作處理

    這篇文章主要為大家介紹了React?Suspense前后端IO異步操作處理示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • react lazyLoad加載使用詳解

    react lazyLoad加載使用詳解

    lazy是React提供的懶(動態(tài))加載組件的方法,React.lazy(),路由組件代碼會被分開打包,能減少打包體積、延遲加載首屏不需要渲染的組件,依賴內置組件Suspense標簽的fallback屬性,給lazy加上loading指示器組件,Suspense目前只和lazy配合實現(xiàn)組件等待加載指示器的功能
    2023-03-03

最新評論