react hook+Typescript+一个ts项目

2023-10-29

说到Hook,少不了react16的新生命周期
https://segmentfault.com/a/1190000018413163

关于getDerivedStateFromProps钩子(怎么在里面进行异步,判断是由state还是props驱动的呢?
https://www.jianshu.com/p/50fe3fb9f7c3

创建
npx create-react-app ts-with-react --typescript

注:export 和 import 会将一个文件变成模块,即里面的变量不会被暴露到全局

ts内部自带的interface

类组件:
React.Component<any, any>
参数第一个是 props 的类型,第二个是 state 的类型。

函数组件:
React.FunctionComponent< any>
React.FC< Props>
函数式组件类型可以使用React.FC,使用这个类型有个好处就是,提醒你必须返回一个ReactNode。
会自动包装props,为FC类型,可以使用props.children
在这里插入图片描述
而且FC泛型还能包装函数,比如直接挂在函数组件上
在这里插入图片描述
在这里插入图片描述

const FuncExample: React.FC<IFunExampleProps> = (props: IFunExampleProps) => {
    const [color, setColor] = React.useState('blue')
  const [fontSize, setFontsize] = React.useState('16px')

  const changeColor = () => {
    setColor('green')
  }

  React.useEffect(() => {
    let timer = setInterval(() => {
      setFontsize('100px')
    }, 10000)

    return () => {
      clearInterval(timer)
    }

  return (
      <div>
      <div style={{color,fontSize}}>函数式组件</div>
      <Button type='primary' className='example-button' onClick={changeColor}>点击换色        </Button>
    </div>
  )
}

React.ReactNode类型

HTMLelement类型
const text = React.useRef< HTMLDivElement>(null)

MouseEvent类型在这里插入图片描述

为什么要使用hook
1、简易
2、方便状态复用(类似hoc)
3、不以生命周期为划分组件逻辑的依据。
比如一个监听函数的挂载和卸载,component里就是在didmounted里挂载,在willunmount里卸载,这样容易写漏,而且并不是根据功能划分代码,而是根据生命周期划分。
hook里就可以直接监听这个函数,把挂载和卸载写在一起。
在这里插入图片描述
在这里插入图片描述
自定义Hook:
将组件逻辑提取到可复用的hook中,必须用use开头,返回一个看想怎么用的东西,可以返一个[state,setstate]数组
在这里插入图片描述

使用自定义hook可以代替HOC高阶组件,把逻辑封装在内部,传props获取想要的组件
在这里插入图片描述
这样类似的函数可以做如果没有umi/dva模型下的计算lodding方式,把计算此请求时间loading的值传出来。

useRef
(比如setState更新了值之后马上要用到,可以用useRef,但是要注意useRef不会触发重新渲染。
在这里插入图片描述
可以拿到dom节点
HTMLInputElement
在这里插入图片描述
在这里插入图片描述
监听
添加监听事件,其实添加事件,只要把函数()就能执行了
在这里插入图片描述
context
React.Context对象
在这里插入图片描述
使用,用createContext创建
在这里插入图片描述
useContext可以取出来,相当于context.consumer了
在这里插入图片描述
1、https://eslint.org/docs/user-guide/getting-started
npm install eslint --save-dev
npx eslint --init
出现这个
在这里插入图片描述

eslint --init
(报错,不过好像prettier可以格式化了,就先这样吧)

开始写,目标是用antd+hook+ts做一个简单的博客(准确说是一个简单的静态页面)

报错:JSX 元素隐式具有类型 “any”,因为不存在接口 “JSX.IntrinsicElements”。
为了避免以后的端口号冲突
先在项目工程目录下安装名为cross-env的插件:

yarn add cross-env
然后修改package.json文件的”scripts”,增加如下:
“scripts”: {
“start”: “cross-env PORT=4321 react-app-rewired start”,
“build”: “react-app-rewired build”,
“test”: “react-app-rewired test”,
“eject”: “react-scripts eject”
},
最后yarn start, 项目就从localhost:4321运行了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react hook+Typescript+一个ts项目 的相关文章

随机推荐

  • 排序二叉树转变为有序双向链表

    要点 1 直接改变树的结构 2 排序二叉树在中序遍历的时候是有序的 3 双向链表 需要前后两个指针 可以将Tree的节点作为链表节点 代码实现 中序的递归实现 void ToList Tree pTree Tree pHead Tree p
  • 图形识别工具-百度AI接口实现

    简介 借出百度AI平台后看到有一个图像识别工具 就简单实现了下 效果挺好的 使用也简单 百度提供了两种实现方式 1 api方式调用 2 sdk方式调用 此方式简单 本文就以此为主讲一下 a 先下载图像识别sdk 地址 https cloud
  • 【毕业设计】 微信小程序购物商城系统 【含代码】

    文章目录 0 前言 1 开发工具 2 总体架构 3 项目规划 4 云数据库 5 项目解构 5 1 购买首页 5 2 商品详情页 5 3 搜索页 5 4 品牌分类页 5 5 筛选排序页 6 最后 0 前言 Hi 同学们好呀 学长今天带大家做一
  • 06-限流策略有哪些,滑动窗口算法和令牌桶区别,使用场景?【Java面试题总结】

    限流策略有哪些 滑动窗口算法和令牌桶区别 使用场景 常见的限流算法有固定窗口 滑动窗口 漏桶 令牌桶等 6 1 固定窗口 概念 固定窗口 又称计算器限流 对一段固定时间窗口内的请求进行一个计数 如果请求数量超过阈值 就会舍弃这个请求 如果没
  • 【EI会议】2022年第三届纳米材料与纳米技术国际会议(NanoMT 2022)

    2022年第三届纳米材料与纳米技术国际会议 NanoMT 2022 重要信息 会议网址 www nanomt org 会议时间 2022年9月23 25日 召开地点 中国南京 截稿时间 2022年8月21日 录用通知 投稿后2周内 收录检索
  • QT鼠标控制

    文章目录 鼠标状态改变 限制鼠标活动区域 鼠标状态改变 void QApplication setOverrideCursor const QCursor cursor bool replace FALSE 设置应用程序强制光标为 curs
  • 晨读-为什么有时控制不了我的情绪?

    情绪是天生的 而且每一种情绪都有它的功能 例如恐惧让我们远离危险 焦虑让我们提升行动力 等等 但是我们还是会出现的情况是 明明我都理解 那些道理我都懂 为什么我还是忍不住难受 这些冒出来的情绪还是不受控制 在控制情绪之前 我们先要了解 我们
  • [避坑指南]GD32F130系列TIMER14

    前言 本人在使用GD32F130F8P6时 使能PA3引脚输出PWM波 但是检查代码没有问题 就是不出PWM波 折磨了3天 最后发现是该款单片机没有TIMER14定时器 手册误导用户啊 代码部分 此代码驱动TIMER14是没有问题的 voi
  • 9道常见的java笔试选择题

    1 关于Java编译 下面哪一个正确 选择一项 A Java程序经编译后产生machine code B Java程序经编译后会生产byte code C Java程序经编译后会产生DLL D 以上都不正确 答案 B 分析 Java是解释型
  • 北京大学肖臻老师《区块链技术与应用》公开课笔记15——ETH概述篇

    北京大学肖臻老师 区块链技术与应用 公开课笔记 以太坊概述篇 对应肖老师视频 click here 全系列笔记请见 click here About Me 点击进入我的Personal Page BTC和ETH为最主要的两种加密货币 BTC
  • 山东大学项目实训开发日志——基于vue+springboot的医院耗材管理系统(16)

    今天我们解决了一个困扰了我们很久的问题 isqr值的获取与使用 功能的设想 通过isqr这个值来确定该耗材是否使用二维码管理 在新增耗材种类的时候加入该属性 选择是或否 并写入数据库 在显示库存数据的时候通过耗材的id查找该值 以此决定是否
  • 解决:Cannot deserialize value of type `java.util.Date` from String “xxx“: not a valid representation..

    一 问题 在做数据更新操作的时候 后台数据为Date时 前端把String类型数据传到后台时 Date类型无法识别这个String数据 所以会报错 二 错误描述 主要问题 Caused by com fasterxml jackson da
  • linux重启命令

    shutdown重启系统 usr sbin shutdown r now usr sbin 指定了命令的位置 路径 shutdown 是命令本身 r 是指示重新启动系统的选项 now 表示立即执行命令 不进行倒计时 也可以指定一个时间延迟
  • el-input校验,只能输入正整数

    一 表单校验方式 fileSort required true message 请输入排序 trigger blur pattern 1 9 d message 请输入正整数 trigger blur 二 el input的type设置为n
  • mybatis笔记(老杜版本)

    一 MyBatis概述 1 1框架 Java常 框架 SSM三 框架 Spring SpringMVC MyBatis SpringBoot SpringCloud 等 SSM三 框架的学习顺序 MyBatis Spring SpringM
  • mysql jdbc url utf8_Mysql JDBC Url参数与异常问题

    今天在写Java项目使用了 SELECT FROM plan WHERE isDelete isDelete AND nestId in open close separator gt nestId 但是很不幸 后台报异常 java sql
  • springboot整合七牛云对象存储

    目录 一 测试 二 整合 一 测试 注册七牛云账号 并进行邮箱绑定和实名认证 七牛云每个月送10G完全够我们开发 创建一个空间 存储区域哪里离你近选哪里 访问控制一定要公开 创建完成后 后期上传的静态资源 可以根据域名 文件名直接访问 自定
  • Java中正则表达式的使用

    Java中正则表达式的使用 在Java中 我们为了查找某个给定字符串中是否有需要查找的某个字符或者子字串 或者对字符串进行分割 或者对字符串一些字符进行替换 删除 一般会通过if else for 的配合使用来实现这些功能 如下所示 Jav
  • MMdetection之train_detector 源码解析

    目录 一 构建 data loaders mmdet datasets builder py 2 构建分布式处理对象 3 构建优化器 4 创建 EpochBasedRunner 并进行训练 一 构建 data loaders mmdet d
  • react hook+Typescript+一个ts项目

    说到Hook 少不了react16的新生命周期 https segmentfault com a 1190000018413163 关于getDerivedStateFromProps钩子 怎么在里面进行异步 判断是由state还是prop