在TypeScript使用React forwardRef

2023-11-15

React forwardRef 用于获取子结点的DOM元素引用。当结合TS使用时,需要注意类型断言。

import { forwardRef, useEffect } from "react";

const Test = forwardRef<HTMLDivElement>((props, ref) => {
  useEffect(() => {
      console.log(ref.current); 
  }, []);
  return <div ref={ref}>hello world!</div>;
});

console.log(ref.current) 会抛出

Property 'current' does not exist on type '((instance: HTMLDivElement | null) => void) | MutableRefObject<HTMLDivElement | null>'.

可以看出ref的类型签名为:

((instance: HTMLDivElement | null) => void) | MutableRefObject<HTMLDivElement | null>

即可能是函数,也可能是对象,也可能是null。

故需要排除null或者函数的情况,因为二者不可能有current属性。如下:

import { forwardRef, useEffect } from "react";

const Test = forwardRef<HTMLDivElement>((props, ref) => {
  useEffect(() => {
    if (typeof ref !== "function" && ref !== null) 
      console.log(ref.current);
  }, []);
  return <div ref={ref}>hello world!</div>;
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在TypeScript使用React forwardRef 的相关文章

随机推荐

  • Beyond Compare4到期

    到期后 删除注册表下的 计算机 HKEY CURRENT USER SOFTWARE Scooter Software Beyond Compare 4下的CacheID文件 试用期重新计算 打开注册表 win r 输入regedit
  • rollback-only异常令我对事务有了新的认识

    背景 环境 相关环境配置 SpringBoot PostGreSQL Spring Data JPA 问题 两个使用 Transaction 注解的 ServiceA 和 ServiceB 在 A 中引入了 B 的方法用于更新数据 当 A
  • 虚拟机配置NAT网络

    如果你的网络ip资源紧缺 但是你又希望你的虚拟机能够联网 这时候NAT模式是最好的选择 NAT模式借助虚拟NAT设备和虚拟DHCP服务器 使得虚拟机可以联网 其网络结构如下图所示 这个地方一定要将 主机网卡和虚拟网卡VMnet8地址设置成不
  • Linux中下载Redis

    1 在Redis版本库 https download redis io releases 可根据自己的需求选择下载对应的版本 然后直接下载 2 上传到linux里面 3 解压安装包 4 进入文件 打开文件 查看文件 5 进行编译 6 安装完
  • Springboot2.7.5版本升级2.7.8Redis启动报错

    项目从Springboot2 7 5升级到Springboot2 7 8的时候 启动时redis报错 报错如下 org springframework beans factory UnsatisfiedDependencyException
  • 网络拓扑配置案例练习(VRRP,浮动路由,DHCP,三层交换机配置)

    网络拓扑配置案例 网络拓扑配置案例练习 网络拓扑 需求描述 具体操作命令 交换机创建vlan 配置access trunk口 划分vlan vrrp配置 路由配置 验证vrrp和浮动路由 DHCP配置 总结 网络拓扑配置案例练习 在这篇文章
  • 线性空间和线性变化

    目录 考点一 线性空间的基与维数 1 线性空间 2 基底 3 子空间 线性子空间 编辑4 生成子空间 1 v1 n v2 2 v1 v2 5 求和子空间的方法 6 维数定理 7 例题 1 例1 1 考点二 证明线性变换 1 变换 2 线性变
  • SpringBoot 配置404页面

    SpringBoot 配置404页面 项目环境 服务器 centos 前端 Vue 后端 SpringBoot 出现的问题 访问一个不存在的页面时 会出现tomcat自带的404界面 这个界面对于用户不太友好 解决方案 1 自己写好404页
  • 有效解决C# Random生成随机数重复的问题

    在Random生成随机数的时候 如果短时间内连续生成随机数 就会导致生成的随机数相同 下面我们介绍如何解决在 短时间内生成随机数的时候 如何避免随机数不一样的问题 实例下载链接 http download csdn net download
  • FPGA——浅谈跨时钟域

    本篇文章仅用于个人学习 如有雷同 我抄他的 跨时钟域是每个FPGA初学者都会遇到的问题 跨时钟域分情况有以下几种 单bit跨时钟域 慢时钟域到快时钟域 快时钟域到慢时钟域 多bit跨时钟域 单bit跨时钟域 慢时钟域到快时钟域 首先谈谈单b
  • 华为OD机试真题 Java 实现【快速开租建站】【2023Q1 200分】,附详细解题思路

    一 题目描述 当前IT部门支撑了子公司颗粒化业务 该部门需要实现为子公司快速开租建站的能力 建站是指在一个全新的环境部署一套IT服务 每个站点开站会由一系列部署任务项构成 每个任务项部署完成时间都是固定和相等的 设为1 部署任务项之间可能存
  • Java正则表达式工具类

    import org apache commons lang3 StringUtils import org slf4j Logger import org slf4j LoggerFactory import java lang refl
  • Altium designer20(AD20)安装教程

    一 教程是基于本人在安装过程中的截图 步骤都非常详细 PDF教程文档 AD 20安装 提取码 u8mm AD20下载链接 AD20安装包 提取码 v7t6
  • KDD Cup竞赛介绍

    转自 http huzhyi21 blog 163 com blog static 1007396200981534952541 KDD Cup简介 KDD Cup is the annual Data Mining and Knowled
  • Win10系统VS2019+Cmake+gflags2.2.2环境配置

    1 gflags 1 1 简要介绍 gflags是google开源的一套命令行参数解析工具 使用C 开发 具备Python接口 可以替代getopt gflags使用起来比getopt方便 但是不支持参数的简写 例如getopt支持 lis
  • LLM-项目详解-KnowLM:信息抽取大模型

    GitHub zjunlp KnowLM Knowledgable Large Language Models Framework 随着深度学习技术的快速发展 大型语言模型如ChatGPT在自然语言处理领域已经取得了显著的成就 然而 这些大
  • c++的构造函数初始化列表

    C 类构造函数初始化列表 构造函数初始化列表以一个冒号开始 接着是以逗号分隔的数据成员列表 每个数据成员后面跟一个放在括号中的初始化式 例如 class CExample public int a float b 构造函数初始化列表 CEx
  • PCB设计误区-电源是不是必须从滤波电容进入芯片管脚(终结篇)

    PCB设计误区 电源是不是必须从滤波电容进入芯片管脚 终结篇
  • Mysql架构和InnoDB存储引擎流程

    一 整体架构和流程 二 流程图解析 这一共分为四个步骤 1 前台操作触发Mysql服务器执行请求 2 InnoDB存储引擎 缓冲池中完成更新的基本操作 3 Redo Log和BinLog保证事务的可靠性 4 将事务的操作持久化 一 a 前台
  • 在TypeScript使用React forwardRef

    React forwardRef 用于获取子结点的DOM元素引用 当结合TS使用时 需要注意类型断言 import forwardRef useEffect from react const Test forwardRef