我的编程空间,编程开发者的网络收藏夹
学习永远不晚

React项目中应用TypeScript的实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

React项目中应用TypeScript的实现

一、前言

单独的使用typescript 并不会导致学习成本很高,但是绝大部分前端开发者的项目都是依赖于框架的

例如和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实际就是社区中的DefinitelyTyped库,定义了目前市面上绝大多数的JavaScript库的声明

所以下载相关的javascript对应的@types声明时,就能够使用使用该库对应的类型定义

二、使用方式

在编写react项目的时候,最常见的使用的组件就是:

  • 无状态组件
  • 有状态组件
  • 受控组件

无状态组件

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


import * as React from 'react'

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

    return (
        <img class="lazy" data-src={logo} className={className} alt={alt} />
    )
}

但这时候ts会出现报错提示,原因在于没有定义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 class="lazy" data-src={logo} className={className} alt={alt} />
    )
}

但是我们都知道props里面存在children属性,我们不可能每个porps接口里面定义多一个children,如下:


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

更加规范的写法是使用React里面定义好的FC属性,里面已经定义好children类型,如下:


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

    return (
        <img class="lazy" data-src={logo} className={className} alt={alt} />
    )
}

  • React.FC显式地定义了返回类型,其他方式是隐式推导的
  • React.FC对静态属性:displayName、propTypes、defaultProps提供了类型检查和自动补全
  • React.FC为children提供了隐式的类型(ReactElement | null)

有状态组件

可以是一个类组件且存在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更新状态

受控组件

受控组件的特性在于元素的内容通过组件的状态state进行控制

由于组件内部的事件是合成事件,不等同于原生事件,

例如一个input组件修改内部的状态,常见的定义的时候如下所示:


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、默认参数、以及store等等......

typescript在框架中使用的学习成本相对会更高,需要不断编写才能熟练

到此这篇关于React项目中应用TypeScript的实现的文章就介绍到这了,更多相关React项目应用TypeScript 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

React项目中应用TypeScript的实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Typescript井字棋的项目实现

本文主要介绍了Typescript井字棋的项目实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

react+typescript中使用echarts的实现步骤

本文主要介绍了react+typescript中使用echarts的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

TypeScript在React中的应用技术实例解析

这篇文章主要为大家介绍了TypeScript在React中的应用技术实例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-16

项目中使用TypeScript的TodoList实例详解

这篇文章主要为大家介绍了项目中使用TypeScript的TodoList实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-04

react项目中使用react-dnd实现列表的拖拽排序功能

这篇文章主要介绍了react项目中使用react-dnd实现列表的拖拽排序,本文结合实例代码讲解react-dnd是如何实现,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-02-06

怎么用react+ts实现简单jira项目

这篇文章主要介绍“怎么用react+ts实现简单jira项目”,在日常操作中,相信很多人在怎么用react+ts实现简单jira项目问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用react+ts实现简单
2023-06-20

教你如何实现在react项目中嵌入Blazor

这篇文章主要介绍了如何实现在react现有项目中嵌入Blazor,通过这个案例我们可以知道blazor也可以像react那样嵌入在任何的现有项目中,并且使用方便,需要的朋友可以参考下
2023-01-28

前端项目中的Vue、React错误监听怎么实现

本篇内容介绍了“前端项目中的Vue、React错误监听怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、 Vue 错误监听题目:如何
2023-06-30

Android应用中如何实现读取项目中的txt文件

这篇文章给大家介绍Android应用中如何实现读取项目中的txt文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体如下:1. 众所周知,Android的res文件夹是用来存储资源的,可以在res文件夹下建立一个ra
2023-05-31

编程热搜

目录