最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React項(xiàng)目中應(yīng)用TypeScript的實(shí)現(xiàn)

 更新時(shí)間:2021年09月17日 09:32:51   作者:?jiǎn)葱歉哒? 
TypeScript通常都會(huì)依賴于框架,例如和vue、react 這些框架結(jié)合,本文就主要介紹了React項(xiàng)目中應(yīng)用TypeScript的實(shí)現(xiàn),分享給大家,具體如下:

一、前言

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

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

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

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

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

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

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

二、使用方式

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

  • 無狀態(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} />
    )
}

但這時(shí)候ts會(huì)出現(xiàn)報(bào)錯(cuò)提示,原因在于沒有定義porps類型,這時(shí)候就可以使用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屬性,我們不可能每個(gè)porps接口里面定義多一個(gè)children,如下:

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

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

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

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

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

有狀態(tài)組件

可以是一個(gè)類組件且存在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>
    )
  }
}

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

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

class Component<P, S> {

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

    state: Readonly<S>;

}

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

受控組件

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

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

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

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

常用Event 事件對(duì)象類型:

  • ClipboardEvent<T = Element> 剪貼板事件對(duì)象
  • DragEvent<T = Element> 拖拽事件對(duì)象
  • ChangeEvent<T = Element>  Change 事件對(duì)象
  • KeyboardEvent<T = Element> 鍵盤事件對(duì)象
  • MouseEvent<T = Element> 鼠標(biāo)事件對(duì)象
  • TouchEvent<T = Element>  觸摸事件對(duì)象
  • WheelEvent<T = Element> 滾輪事件對(duì)象
  • AnimationEvent<T = Element> 動(dòng)畫事件對(duì)象
  • TransitionEvent<T = Element> 過渡事件對(duì)象

T接收一個(gè)DOM 元素類型

三、總結(jié)

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

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

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

相關(guān)文章

  • React之防止按鈕多次點(diǎn)擊事件?重復(fù)提交

    React之防止按鈕多次點(diǎn)擊事件?重復(fù)提交

    這篇文章主要介紹了React之防止按鈕多次點(diǎn)擊事件?重復(fù)提交問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • React中使用Echarts無法顯示title、tooltip等組件的解決方案

    React中使用Echarts無法顯示title、tooltip等組件的解決方案

    這篇文章主要介紹了React中使用Echarts無法顯示title、tooltip等組件的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • react實(shí)現(xiàn)消息顯示器

    react實(shí)現(xiàn)消息顯示器

    這篇文章主要為大家詳細(xì)介紹了react實(shí)現(xiàn)消息顯示器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • React組件間傳值及跨組件通信詳解

    React組件間傳值及跨組件通信詳解

    這篇文章主要介紹了React組件間傳值及跨組件通信的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • react中JSX的注意點(diǎn)詳解

    react中JSX的注意點(diǎn)詳解

    這篇文章主要為大家詳細(xì)介紹了react中JSX的注意點(diǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • react實(shí)現(xiàn)列表滾動(dòng)組件功能

    react實(shí)現(xiàn)列表滾動(dòng)組件功能

    在開發(fā)項(xiàng)目的時(shí)候,從服務(wù)端獲取到數(shù)據(jù)列表后,展示給用戶看,需要實(shí)現(xiàn)數(shù)據(jù)自動(dòng)滾動(dòng)效果,怎么實(shí)現(xiàn)呢,下面小編給大家分享react實(shí)現(xiàn)列表滾動(dòng)組件功能實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧
    2023-09-09
  • React?Suspense前后端IO異步操作處理

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

    這篇文章主要為大家介紹了React?Suspense前后端IO異步操作處理示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 簡(jiǎn)化Cocos和Native交互利器詳解

    簡(jiǎn)化Cocos和Native交互利器詳解

    這篇文章主要為大家介紹了簡(jiǎn)化Cocos和Native交互利器詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • React使用有限狀態(tài)機(jī)的實(shí)現(xiàn)示例

    React使用有限狀態(tài)機(jī)的實(shí)現(xiàn)示例

    本文主要介紹了React使用有限狀態(tài)機(jī)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 解決React報(bào)錯(cuò)Property?'value'?does?not?exist?on?type?EventTarget

    解決React報(bào)錯(cuò)Property?'value'?does?not?exist?on?

    這篇文章主要為大家介紹了React報(bào)錯(cuò)Property?'value'?does?not?exist?on?type?EventTarget的解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論

丰县| 台中县| 汝南县| 南京市| 茶陵县| 新干县| 中宁县| 兴和县| 南澳县| 贺兰县| 余江县| 育儿| 巴青县| 探索| 万载县| 元阳县| 吉木乃县| 瓮安县| 城步| 十堰市| 连江县| 昌乐县| 龙陵县| 蒲城县| 昌平区| 清流县| 兰考县| 乡城县| 衢州市| 德惠市| 修文县| 苏尼特左旗| 东阳市| 泸州市| 庄河市| 青神县| 新竹市| 贵南县| 澄迈县| 衡水市| 睢宁县|