需求:

有一个组件中有两个ref,一个f是orwardRef暴露出的ref,另一个是内部维护的ref

如何将这个两个ref都赋到 一个element上?

const Element = forwardRef((props, ref) => {const insiderRef = useRef(null);return (<div></div>)
})

解决方案:

ref可以接收一个回调函数,这个回调函数在组件挂载或者卸载的时候被调用,函数参数为组件实例或DOM元素。

可以利用此机制,实现一个函数为两个ref赋值。

hooks实现如下:

import { MutableRefObject, Ref, useMemo } from 'react';function setRef<T>(ref: MutableRefObject<T | null> | ((instance: T | null) => void) | null | undefined,value: T | null,
): void {if (typeof ref === 'function') {ref(value);} else if (ref) {ref.current = value;}
}export default function useForkRef<InstanceA, InstanceB>(refA: Ref<InstanceA> | null | undefined,refB: Ref<InstanceB> | null | undefined,
): Ref<InstanceA & InstanceB> | null {/*** This will create a new function if the ref props change and are defined.* This means react will call the old forkRef with `null` and the new forkRef* with the ref. Cleanup naturally emerges from this behavior.*/return useMemo(() => {if (refA == null && refB == null) {return null;}return (refValue) => {setRef(refA, refValue);setRef(refB, refValue);};}, [refA, refB]);
}

React 将多个ref同时赋给一个element相关推荐

  1. React基础(2)—— React函数式组件使用ref

    React函数式组件使用ref ref ref的作用 ref用于获取DOM元素或子组件实例. useRef useRef作用 useRef用于返回一个可变的ref对象.这个refduix的curren ...

  2. 构建一个react项目_您想要了解更多有关React的内容吗? 让我们构建一个游戏,然后玩。...

    构建一个react项目 by Samer Buna 通过Samer Buna 您想要了解更多有关React的内容吗? 让我们构建一个游戏,然后玩. (Do you want to learn more ...

  3. adoquery查询结果如何赋给一个变量(delphi和c++ builder)

    我用的是adoquery进行数据库查询,但是我不想把查询的结果显示出来,只是想赋给一个变量,请问我这个变量该怎样去设置呢 ?  回复人:sunriver 回复时间:2005-6-3 9:11:00 p ...

  4. c语言如何用fscanf将字符串读取,在c语言中如何将文本内容 赋给一个 字符串

    在c语言中如何将文本内容 赋给一个 字符串 来源:互联网  宽屏版  评论 2009-08-13 04:59:12 分类: 电脑/网络 >> 程序设计 >> 其他编程语言 问题 ...

  5. [react] 怎样将多个组件嵌入到一个组件中?

    [react] 怎样将多个组件嵌入到一个组件中? import A from '/*' 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣 ...

  6. mysql substring函数截取值后赋给一个declare变量

    今天写的一个mysql存储过程涉及到对一个传入参数的字符串截取,然后需要判断截取字符串进行一系列操作,最开始用select  subtring() into 这样的方法将截取值赋于declare变量直 ...

  7. 2.8 将一个整型变量的值赋给一个布尔型变量,再将这个布尔型变量的值赋给一个整型变量,得到的值是多少?

    试题描述 将一个整型变量的值赋给一个布尔型变量,再将这个布尔型变量的值赋给一个整型变量,得到的值是多少? 输入格式 一个整型范围内的整数,即初始时整型变量的值. 输出格式 一个整数,经过上述过程后得到 ...

  8. react.js 给标识ref,获取内容

    import React,{Component} from 'react' import ReactDOM from 'react-dom' class App extends Component{ ...

  9. TypeScript与React中如何使用ref

    父组件 在父组件中,编写如下: 类中定义child,用于存放子组件的作用域 public child: any;Copy to clipboardErrorCopied 绑定子组件作用域 public ...

最新文章

  1. Ruby中的设计模式
  2. 微软Silverlight 5开发书籍汇总
  3. 【JVM】三色标记法与读写屏障
  4. Request介绍及演示样例 PART1
  5. Ubuntu 16.04升级Linux内核为4.7.0最快的方法
  6. 自己整理出来的一些标签
  7. 2.从Paxos到Zookeeper分布式一致性原理与实践---一致性协议
  8. oracle11g的adg需要付费嘛,Oracle11g ADG 搭建
  9. python北京房价预测_python数据分析——北京房价分析
  10. 线性代数辅导讲义(第四章 线性方程组)
  11. MacBook Pro 2017版A1708 更换ssd
  12. 微信小程序添加激励式广告
  13. scala reduce和Fold
  14. mac系统怎么给文件夹加密?mac文件夹加密教程
  15. 【优化算法】改进的灰狼优化算法(IGWO)【含Matlab源码 1349期】
  16. xiuno开发文档_$ip-XiunoPHP 4.0 开发手册
  17. Gartner 2022 应用安全测试魔力象限
  18. 关于Java使用POI对Excel2003和2007的导入和导出
  19. Excel区间数据拆分
  20. [加密]展讯secureboot方案

热门文章

  1. 居家好物分享:多特瑞精油,让生活更“多”姿“多”彩!
  2. python XGboost回归预测 算法实现和原理讲解(比赛青睐)
  3. 荣耀路由器家族新品开箱上手 wifi6时代全面来临
  4. miui无法降级安装app_小米8手机安卓P版MIUI10降级教程,送给那些后悔升级的小伙伴...
  5. android夜间模式护眼,长时间看开着护眼模式(夜间模式)玩手机,这样对人有影响吗?...
  6. 1 035.00 php,樱花校园模拟器历史版本
  7. java csv文件tozip后损坏_教你修复损坏的gz或tar.gz压缩文件
  8. 06 SpringBoot企业实战多环境切换之Profile
  9. 查看python关键字的方法,查看python关键字的方法
  10. 你一定要收藏的全网最完整CAD快捷键大全!三