首页 > 其他分享 >在 React 中使用 TypeScript

在 React 中使用 TypeScript

时间:2022-12-11 18:44:19浏览次数:60  
标签:TypeScript age TS React json 使用 组件 tsconfig

如何在 React 项目中使用 TS,包括以下内容:

  1. 使用 CRA 创建支持 TS 的项目

  2. TS 配置文件 tsconfig.json

  3. React 中的常用类型

使用 CRA 创建支持 TS 的项目

React 脚手架工具 create-react-app (简称 CRA)默认支持 TypeScript。

创建支持 TS 的项目命令:npx create-react-app 项目名称 --template typescript。

 

相对于非 TS 项目,目录结构主要由以下三个变化:

    1. 项目根目录中增加了 tsconfig.json 配置文件:指定 TS 的编译选项(比如,编译时是否移除注释)

    2. React 组件的文件扩展名变为 *.tsx

    3. src 目录中增加了 react-app-env.d.ts:React 项目默认的类型声明文件

      1. 三斜线指令:指定依赖的其他类型声明文件,types 表示依赖的类型声明文件包的名称。///

      2. 解释:告诉 TS 帮我加载 react-script 这个包。

      3. react-script 的类型声明文件包含了两部分类型:

        1. react、react-dom、node的类型

        2. 图片、样式等模块的类型,以允许在代码中导入图片、SVG等文件

        3. TS 会自动加载 .d.ts 文件,以提供类型声明(通过修改 tsconfig.json 中的 include 配置来验证)

 

TS 配置文件 tsconfig.json

tsconfig.json 指定:项目文件和项目编译所需的配置项。

注意:TS 的配置项非常多(100+),以 CRA 项目中的配置为例来学习,其他配置项用时查文档即可。

  1. tsconfig.json 文件所在目录为项目根目录(与 package.json 同级)

  2. tsconfig.json 可以自动生成,命令:tsc --init

 

除了在 tsconfig.json 文件中使用编译配置外,还可以通过命令行来使用。

使用演示:tsc hello.ts --target es6

注意:

  1. tsc 后带有输入文件时(比如:tsc hello.ts),将忽略 tsconfig.json 文件

  2. tsc 后不带输入文件时(比如:tsc),才会启动 tsconfig.json

推荐使用:tsconfig.json 配置文件

 

React 中的常用类型

前提说明:现在,基于 class 组件来讲解 React + TS 的使用(最新的 React Hooks)

在不使用 TS 时,可以使用 proptypes 库,为 React 组件提供类型检查。

说明:TS 项目中,推荐使用 TypeScript 实现组件类型校验(代替 Proptypes)。

不管是 React 还是 Vue,只要是支持 TS 的库,都提供了很多类型,来满足该库对类型的需求。

注意:

  1. React 项目是通过@types/react、@types/react-dom 类型声明包,来提供类型的。

  2. 这些包 CRA 已帮我们安装好(react-app-env.d.ts),直接用即可。

 

React 中的常用类型

React 是组件化开发模式,React 开发主要任务就是写组件,两种组件:1、函数组件 2、class组件

函数组件主要包括4个方面:

  1. 组件的类型

  2. 组件的属性,props

  3. 组件属性的默认值,defaultProps

  4. 事件绑定和事件对象

import { FC } from 'react'; //导入 FC 方法
type Props = { name: string; age?: number } //定义类型
 //创建组件
const Hello: FC<Props> = ({ name, age }) => ( <div>您好,我叫{ name },我{ age }岁了</div> )
// 简化:完全利用 JS(TS) 自身的能力来编写组件
const hello = ({ name, age }: Props) => ( <div>您好,我叫{ name },我{ age }岁了</div> )
​
//渲染组件
const App = () => ( 
  <div>
    <Hello name='jack' age={16} />
  </div>
)
​
// 组件属性的默认值
Hello.defaultProps = { age: 18 }
// 简化:
const hello = ({ name, age = 18 }: Props) => ( <div>您好,我叫{ name },我{ age }岁了</div> )
​
//事件绑定和事件对象
<button onClick = {onClick}>点赞</button>
const onClick = () => {}
const onClicks = (e: React.MouseEvent<HTMLButtonElement>) => {}
<input onChange = {onChange}/>
const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {}
// 技巧:在 JSX 中写事件处理程序(e => {}),然后,把鼠标放在 e 上,利用 TS 的类型推论来查看事件对象类型。
<input onChange={ e => {} }/>

class 组件,主要包含2个方面:

  1. 组件的类型、属性、事件

  2. 组件状态(state)

type State = { count: number }
type Props = { message?: string }
calss C1 extends React.Compoent {}                //无 Props、state
calss C1 extends React.Compoent<Props> {}         //有 Props、无 state
calss C1 extends React.Compoent<{}, State> {}     //无 Props、有 state
calss C1 extends React.Compoent<Props, state> {}  //有 props、state 
​
// class 组件的属性和属性默认值
type Props = { name: string; age?: number }
calss Hello extends React.Compoent<Props> {
    static defaultProps: Partial<Props> = { age: 18 }
    render() {
        const { name, age } = this.props
        return <div> 您好,我叫{name},我{age}岁了</div>    
    }
}
​
// class 组件状体(state)和事件
type State = { count: number }
class Counter extends React.Compoent<{}, State> {
    state: State = { count: 0 }
}
onIncrement = () => { this.setState({ count: this.state.count + 1 })}
<button onClick = {this.onIncrement}>+1</button>
 

标签:TypeScript,age,TS,React,json,使用,组件,tsconfig
From: https://www.cnblogs.com/c0lmd0wn/p/16974140.html

相关文章

  • React native 概述和环境搭建
    ReactNative(简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架React在原生移动应用平台的衍生产物,支持iOS和安卓两大平台。RN使......
  • 小程序自定义组件和 npm包的使用
    自定义组件创建自定义组件在根目录下创建components文件夹下创建自定义的组件引用自定义组件//在页面的.json文件中,引入组件{  "usingComponents":{ ......
  • ToDesk使用
    现在的终端产品种类非常的多,常见的包括tablet,手机,笔记本 ,ipod...等等,这些终端带屏产品连同台式机,智能电视等固定设备占据了我们的工作和生活中的大部分时间,不知道你发现......
  • android 原生和ReactApplication的交互
      ReactNative创建工程,是通过在命令终端输入​​react-nativeinit你的项目名字​​来创建工程的,创建的工程会从网络端,同步到你终端所在路径的本地,生成一个和androi......
  • 使webworker中支持使用import导入模块——threads.js
    threads.js基本使用使用vue-cli创建一个项目(我这里vue--version的版本是3.11.0):vuecreatehello-world添加tool.js文件:exportfunctiongetSuffix(){return......
  • sqlite-net-pcl-C#版_安装与使用教
    一、安装:1、引用NuGet包:  “sqlite-net-pcl”与“SQLitePCLRaw.bundle_green”NuGet包。2、sqlite-net-pcl的“数据库连接类”与“数据库配置文件”  ①......
  • 使用avue-form-design生成表单
    前言之前玩一些开源项目的时候有简单接触过可视化表单生成工具,也就是avue-form-design,当时重点都放在服务端了,前端的avue-form-design和avue并没有具体细看,这段时间刚好在搞......
  • Docker-Compose使用例子
     本实例,使用Docker-Compose根据已有tomcat镜像,批量创建5个容器下载docker-composecurl-Lhttps://get.daocloud.io/docker/compose/releases/downloa......
  • 拓端tecdat|matlab辅导使用移动平均滤波器、重采样和Hampel过滤器进行信号平滑处理
    matlab使用移动平均滤波器、重采样和Hampel过滤器进行信号平滑处理 此示例显示如何使用移动平均滤波器和重采样来隔离每小时温度读数的时间周期分......
  • 游戏开发33课 typescript 遍历
    一、for..of方法这是最常用的方法,遍历的值是数组中的value值letsomeArray=[1,"string",false];for(letentryofsomeArray){console.log(entry);//1,"strin......