环境搭建

我们当然可以先用脚手架搭建React项目,然后手动配置成支持TypeScript的环境,虽然比较麻烦,但可以让你更清楚整个过程。这里比较麻烦,就不演示了,直接用命令配置好。

npx create-react-app appname --typescript

可以安装一些自己需要的库及其声明文件,例如react-router-dom、axios、ant Design等。如果要安装ant design,还需要在开发环境库中安装一些依赖库,以帮助实现按需加载。

使用

有类型约束的函数组件

import React from "react";
import { Button } from "antd";interface Greeting {name: string;firstName?: string;lastName?: string;
}// 没有使用React.FC
const HelloOld = (props: Greeting) => <Button>你好{props.name}</Button>;// 使用React.FC泛型类型
const Hello: React.FC<Greeting> = (props) => {return (<Button>Hello {props.name}</Button>)
};export { Hello, HelloOld };

定义函数组件时,使用React.FC与不使用没有太多区别,没有为我们带来明显的好处,建议使用常规定义方式。

有类型约束的类组件

import React,{Fragment} from "react";
import { Button } from "antd";interface Greeting {name: string;firstName?: string;lastName?: string;
}
interface State {count: number
}// 泛型类型,第一个传入参数约束属性props,第二个约束状态state(内部数据)
class HelloClass extends React.Component<Greeting, State> {state: State = {count: 0};static defaultProps = {  // 属性默认值firstName: "",lastName: "",};render() {return (<Fragment><p>点击了{this.state.count}次</p><Button onClick={()=>{this.setState({count: this.state.count+1})}}>Hello{this.props.name}Class</Button></Fragment>);}
}export default HelloClass;

有类型约束的高阶组件

import React from "react";
import HelloClass from "./HelloClass";interface Loading {loading: boolean;
}function HelloHoc<P>(params?: any) {return function<P>(WrappedComponent: React.ComponentType<P>) { // P表示被包装组件的属性的类型return class NewComponent extends React.Component<P & Loading>{ // 这里使用交叉类型,为新组件增加一些属性,接口Loading定义了新增的属性声明render(){return this.props.loading ? <div>Loading</div> : <WrappedComponent {...this.props as P}/>}}}
}export default HelloHoc()(HelloClass);

高阶组件在ts中使用会有比较多的类型问题,解决这些问题通常不会很顺利,而且会存在一些已知的bug,这不是高阶组件本身的问题,而是React声明文件还没有很好地兼容高阶组件的类型检查,更好的方式是使用Hooks

有类型约束的Hooks

import React, { useState, useEffect } from "react";
import { Button } from "antd";interface Greeting {name: string;firstName?: string;lastName?: string;
}const HelloHooks = (props: Greeting) => {const [ count, setCount ] = useState(0); // 设了初值,所以不用定义类型const [ text, setText ] = useState<string | null>(null);useEffect(()=>{count > 5 && setText("休息一下");},[count]); // 第二个参数的作用是,只有当count改变的时候,函数内的逻辑才会执行。return (<><p>你点击了Hooks {count} 次 {text}</p><Button onClick={()=>{setCount(count+1)}}>{props.name}</Button></>);
};export default HelloHooks;

事件绑定

class HelloClass extends React.Component<Greeting, State> {state: State = {count: 0};clickHandle = (e: React.MouseEvent) => { // 事件对象e的类型使用内置的合成事件。在回调函数中,e的属性都会无效e.persist(); // 将该事件从池中删除合成事件,可以正常使用console.log(e);// this.setState({count: this.state.count+1})};inputHandle = (e: React.FormEvent<HTMLInputElement>) => {// e.persist();console.log(e.currentTarget.value); // 此时编译器报错,认为没有value属性,需要指定<HTMLInputElement>泛型类型// console.log(e.target.value); // 仍然不行};render() {return (<Fragment><p>点击了{this.state.count}次</p><Button onClick={this.clickHandle}>Hello{this.props.name}Class</Button><input onChange={this.inputHandle}/></Fragment>);}
}

转载于:https://www.cnblogs.com/V587Chinese/p/11520674.html

TypeScript React相关推荐

  1. typescript+react+antd基础环境搭建

    typescript+react+antd基础环境搭建(包含样式定制) tsconfig.json 配置 // 具体配置可以看上面的链接 这里module moduleResolution的配置都会影 ...

  2. typescript + react 项目开发体验之起手式

    目录 起手式 typescript react一些小姿势 react的状态管理 前言 typescript(以下简称ts) 官推是脚手架 create-react-app 的ts版本,可自行查阅.但是 ...

  3. 使用create-react-app搭建TypeScript+React+Ant Design开发环境

    一.使用create-react-app创建一个支持TypeScript+React的开发环境: 要创建一个支持TypeScript的Create React App项目,可以运行: npx crea ...

  4. TypeScript + React 学习render props

    ###前言 一直想学学TypeScript,尝试尝试带类型的js怎么写,有啥优点.正好这两天有时间结合着react写写小例子. 搭建环境 不想折腾webpack来自己配ts+react的环境就用typ ...

  5. React TypeScript react+ts 包下载

    react+ts下载使用 要使用 TypeScript 启动新的 Create React App 项目,您可以做以下 搭建TS+React的开发环境 Create React App 是一种官方支持 ...

  6. 比较全面的typescript + react 开发教程

    前言 本教程不用react-script这种工具,用的webpack + eslint(可选) + prettier(可选) + babel,使用编辑器用的vscode. 以下会涉及到ts语法和red ...

  7. 如何在React中使用Typescript

    TypeScript can be very helpful to React developers. TypeScript对React开发人员可能非常有帮助. In this video, Ben ...

  8. React + TypeScript 默认 Props 的处理

    React 中的默认 Props 通过组件的 defaultProps 属性可为其 Props 指定默认值. 以下示例来自 React 官方文档 - Default Prop Values: clas ...

  9. 使用Typescript和React的最佳实践

    by Christopher Diggins 克里斯托弗·迪金斯(Christopher Diggins) 使用Typescript和React的最佳实践 (Best practices for us ...

最新文章

  1. AI眼中的世界是什么样子?谷歌新研究找到了机器的视觉概念
  2. 大学文科计算机考试大纲,(文科)大学计算机信息技术课程考核大纲(文科)介绍.doc...
  3. 大数据的说法 正确的是_前端测试题:(解析)用于播放音频文件的正确HTML5元素是?...
  4. 前端学习(3192):react第一个案例
  5. 修复版GEP宝塔内嵌版全解源码
  6. Integer 数据类型
  7. php笔记:抽奖概率算法
  8. SpringBoot生成二维码
  9. 信号与系统学习之第一章(系统的六大基本性质定义与判别:无记忆性、可逆性、因果性、稳定性、时不变性、线性)
  10. 小心啦!水上有“天眼”,查你没商量!
  11. linux驱动管道,Xilinx Linux 如何理解V4L2的管道驱动程序
  12. 高通平台camera客观项测试之色彩偏差白平衡饱和度
  13. 在MFC中手动添加消息处理函数PreTranslateMessage
  14. HDU - 1846 巴士博弈
  15. Replacing LIBOR
  16. 【它山之玉】人生的自然法则-科学网马臻
  17. 微软服务器无法连接,wsus无法连接同步微软更新服务器
  18. bootmgr快速修复win7_小白教程 | U盘重装win7系统
  19. 计算机技能标准包括哪些,(对口单招计算机技能考试标准.doc
  20. 利用深度学习进行时间序列预测

热门文章

  1. 0010服务器无对应信息,查看云服务器信息
  2. c++ 检查缓冲大小与记录大小是否匹配_后端程序员不得不会的 Nginx 转发匹配规则...
  3. HDU 4616 Game 树形DP
  4. LeetCode Hot100 ---- 最长相关专题(动态规划)
  5. 航海学校高级课程任务讲义
  6. strcpy与strdup
  7. 感知算法论文(三):Feature Selective Anchor-Free Module for Single-Shot Object Detection
  8. 网卡驱动:stmmac DMA发送流程
  9. Memcached----2-3
  10. 一文搞懂MySQL的Join