一个需求搞懂useRef和createRef的区别

LS-DYNA壳单元冲击仿真中的5个关键设置:以方管碰撞为例(含沙漏控制参数) 本文以方管碰撞为例,深入解析了LS-DYNA壳单元冲击仿真中的五个关键设置。重点探讨了沙漏控制参数(如IHQ=4)的选择逻辑、自接触算法优化、能量监控方法、材料模型(MAT_24)的真实应力-应变曲线与应变率效应设置,以及单元公式的选取。这些核心设置共同决定了仿真的精度与效率,是确保方管冲击仿真结果可靠性的基石。 阅读详情

问题描述

要求实现的效果是点击每个父组件上的按钮调用子组件的新增方法,使得子组件新增一个配置,我尝试用使用ref绑定组件。一开始未全面搞清楚useRef和createRef的区别,上来就使用useRef,结果是无论点击哪个父组件,始终都是第一个父组件里的子组件在新增。


原因分析

在阅读react官方文档给出对useRef的解读时,忽略了最重要的一句话:
useRef的官方解读
“每次渲染返回同一个ref对象”意味着就算组件重新渲染,useRef也不会改变引用,这就很明显地指出了造成本次结果的原因。


解决方案

将使用的useRef替换成createRef即可实现原本想要的效果。


总结useRef和createRef的区别

先看官网给出的例子:

  1. 两个关于useRef的例子:
  • 常见使用示例:暂无

  • 当配合useImperativeHandle一起使用时的示例:
    暂无

  1. 关于createRef的例子:
    暂无

给的例子是不是看不出createRef和useRef的区别…
其实官方示例就表明:useRef是在函数组件中使用,createRef在class组件中使用。因为createRef并没有hook的效果,所以在函数组件中使用createRef会不断初始化导致找不到ref绑定的元素,而useRef的效果恰恰是需要的,它的引用不变,在不改变它之前,它都是返回被绑定的那个元素。有趣的是这次提出的需求却让我在函数组件里用了createRef,需要它在函数组件里不断被初始化的这个特性。


总结

使用函数式组件开发之后我通常使用useRef替代class组件里的componentWillRecieveProps来判断某个变量在这一次和上一次props的变化,由于我常常使用useRef,需要用ref的时候就首选这个,并没有去考虑过用其他的就导致了这个问题的发生。当然,我觉得这次问题也是比较有意思的,让我在这样的一个机缘巧合里在函数组件使用createRef,打破了常规思维:函数组件就选择useRef,class组件就选择createRef。打怪升级经验值+1,对于官方文档还是需要多研读,有可能一句话没看到或者没放心上,就踩坑了。

在claude code中使用glm模型出现Unable to connect to Anthropic services的解决方案 本文主要介绍了在claude code中使用glm模型出现Unable to connect to Anthropic services的解决方案,希望能对使用claude code的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 阅读详情

相关推荐

电力电子论文(TPE、TTE)投稿经验分享

电力电子顶刊论文投稿经验

橙子的博客 2万+

useRef和createRef

在react中,我们可以使用ref来获取组件示例或者DOM元素。 一般使用方法: const ref = useRef(initialValue); <input ref={ref} /> 注意: useRef返回一个可变的 ref 对象,该对象只有个 current 属性,初始值为传入的参数( initialValue ); 返回的 ref 对象在组件的整个生命周期内保持不变,除非手动修改; 当更新 current 值时并不会 re-render ,这是与 useState 不同的地方;

weixin_43636454的博客 2003

晶振(晶体振荡器)测试方法详解

晶振测试方法分为无源和有源两种类型。无源晶振(两脚)需用示波器测试波形,重点关注正弦波形状、200mV-1.5Vpp幅值和频率精度;有源晶振(四脚)通电后直接输出方波。测试要点包括:示波器使用10X探头、AC耦合,带宽需5倍于晶振频率;万用表可初筛短路/开路;替换法是工程最有效方法。常见故障排查顺序:供电→复位→焊接→型号→负载电容→波形观察→更换晶振→MCU配置。负载电容需按公式计算匹配,示波器观察是核心测试手段。

jiujiujinyuxi的博客 924

react之useRef和createRef

一、useRef和createRef 1. 作用于普通DOM import { Input, Button } from 'antd'; import { useRef, createRef } from 'react'; import type { InputRef } from 'antd'; const RefDemo = () => { const inputEL = useRef<InputRef>(null); const inputEL2 = useRef&lt

大龙帅的博客 4211

PaddleOCR转ONNX模型实战:5分钟搞定中文OCR推理部署(附完整代码)

本文详细介绍了将PaddleOCR模型转换为ONNX格式并进行高效推理部署的完整实战方案。通过Paddle2ONNX工具实现模型转换,利用ONNX Runtime构建跨平台推理引擎,涵盖环境配置、模型优化、批量处理及多平台部署等关键步骤,显著提升中文OCR在边缘设备上的推理性能。

weixin_29051811的博客 616

pi-star图形界面安装指南

pi-star图形界面安装指南,MMDVM热点安装,树莓派3B+热点

blueisman的专栏 1909

useRef和createRef的区别

function App() { const [num, setNum] = useState(0) const uRef = useRef() const cRef = createRef() const btnClk = () => { setNum((num) => num + 1) } useEffect(() => { uRef.current.value = num cRef.current.value = num con

坚持原创 1843

ESP32S3学习——i2c,点亮0.96寸oled

ESP32S3学习——i2c,点亮0.96寸oled

HandBAI的博客 1万+

useRef 与 createRef 区别

/不管你怎么点击按钮,value的值都会是80,并不会发生变化,这是因为ref对象的改变,并不会触发页面的更新setChange({})更新页面。2:ref对象可以用于保存数据。3 获取子组件的属性或方法。

wandoumm的博客 634

从大疆智图到Cesium:3D Tiles模型加载与Web三维场景构建实战

本文详细介绍了如何利用大疆智图生成3D Tiles数据,并通过Cesium在Web端实现高效加载与三维场景构建。从大疆智图参数设置到Cesium环境配置,再到3D Tiles性能调优与高级功能实现,提供了一套完整的实战指南,帮助开发者快速掌握3D Tiles模型加载与Web三维场景构建技术。

weixin_30520015的博客 1285

基于昇腾MindIE开箱部署Qwen2.5-VL-32B,体验更聪明的多模态理解能力

昇腾MindIE已适配支持Qwen2.5-VL-32B-Instruct并上架魔乐社区,欢迎广大开发者下载体验!

2401_87243659的博客 6871

什么是 useRef , useRef 与 createRef 区别, 以及在什么情况下使用 useRef

前言: 这篇文章会假设你已经对 react hook有一些基础的了解. 主要讨论什么是 useRef , useRef 与 createRef 的区别, 以及在什么情况下使用 use...

frontend_frank的博客 2万+

互联网人提高效率必备软件合集

很多的时候我们解决不了问题,只是因为没有找到对的工具,实际上,很多好的工具就在那里,只是你不用而已。这点上,信息壁垒是一个很大的原因,因此我希望兄伙伴们多出去走走,不要只是局限在一个圈层;

zhonglunshun的专栏 3484

搞懂 React ref 原理

前言对于 Ref 理解与使用,一些读者可能还停留在用 ref 获取真实 DOM 元素和获取类组件实例层面上其实 ref 除了这两项常用功能之外,还有很多别的小技巧通过本篇文章的学习,你将收获 React ref 的基本和进阶用法,并且能够明白 React 内部是如何处理 ref 的,并通过一个小 Demo + 提问的方式带你更加深刻地理解 ref 的底层原理1. ref 的理解与使用对于 Ref ...

zz_jesse的博客 859

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

第33节——useRef

useRef,他的作用是“勾住”某些组件挂载完成或重新渲染完成后才拥有的某些对象,并返回该对象的引用。返回的 ref 对象在组件的整个生命周期内保持不变。如果是自定义的react组件(自定义的组件必须大写字母开头),那么是无法使用useRef(当然也有一些奇淫技巧后面我们后续课程会讲😈)的。这样,当父组件想调用子组件中的 doSomting() 时,可执行 childFunRef.current.doSomting()1、useRef是针对函数组件的,如果是类组件则使用React.createRef()。

weixin_57017198的博客 417

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

antd获取form表单数据的两种方法

使用useRef const formRef = useRef<FormInstance>(); <Form ref={formRef }/> //获取 const values = await formRef.current?.validateFields() 使用antd提供的钩子useForm const [form] = Form.useForm<FormInstance>(); <Form form={form}/> //获取 cons

前端劝退工程师 5211

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

createRef和useRef区别——useRef的使用——forwardRef完成类组件的绑定—— useImperativeHandle——映射ref对象——更新同步

createRef和useRef区别——useRef的使用——forwardRef完成类组件的绑定—— useImperativeHandle——映射ref对象——更新同步

阿牛哥的博客 775

141. 精读《useRef 与 createRef 的区别》

1 引言useRef是常用的 API,但还有一个createRef的 API,你知道他们的区别吗?通过React.useRef and React.createRef: The ...

前端精读周刊 1929

浅谈React中的ref和useRef

在各种JavaScript库和框架中,React因其开发人员友好性和支持性而得到认可。大多数开发人员发现React非常舒适且可扩展,因为它提供了钩子。钩子是React附带的内置 API,允许开发人员与React的状态和生命周期功能进行交互。钩子在类内部不起作用,因此它们只能在功能组件中使用。开发人员还可以决定创建自定义钩子。

pantouyuchiyu的博客 1343

React中ref、forwardRef、useRef的简单用法与区别

在上述的示例中,React 会将 <FancyButton ref={ref}> 元素的 ref 作为第二个参数传递给 React.forwardRef 函数中的渲染函数。● 当ref属性用于HTML元素时,构造函数中使用React.createRef(创建的 ref 接收底层DOM元素作为其current 属性。● 当ref属性用于自定义class组件时,ref对象接收组件的挂载实例作为其current 属性。React.forwardRef 会创建一个React组件,这个组件能够将其接受的。

宏愿纵未了 奋斗总不太晚 2493

工作中typeScript用法

在useRef中的使用 import {useRef} from 'react' import type {FormInstance} from 'antd' const formRef = useRef<FormInstance>(); 在ProTable中的使用 export interface TableListItem { id:number; status: string; describe:string; typeName: string; } <Pro

weixin_43852916的博客 438

精读《useRef 与 createRef 的区别》

useRef仅能用在 FunctionComponent,createRef仅能用在 ClassComponent。第一句话是显然的,因为 Hooks 不能用在 ClassComponent。第二句话的原因是,createRef// 错误用法,永远也拿不到 ref上述valueRef会随着 App 函数的 Render 而重复初始化,这也是 Hooks 的独特之处,虽然用在普通函数中,但在 React 引擎中会得到超出普通函数的表现,比如初始化仅执行一次,或者引用不变。为什么createRef。

qzmlyshao的博客 796

React Hook 之 useRef 及与React.createRef 区别

一、useRef useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数(initialValue)。返回的 ref对象在组件的整个生命周期内保持不变。 import React, { useState, useEffect, useMemo, useRef } from 'react'; export default function App(props){ const [count, setCount] = useState(0); const doubl

weixin_42192113的博客 1399

usecallback usememo区别_一篇文章,带你学会useRef、useCallback、useMemo

通过此文章,可以了解到:useRef保持引用不变是怎么回事;useRef能拿到上一次的值是怎么回事;useCallback和useMemo的区别;如何使用useCallback,避免无状态组件(函数式组件)的不必要渲染;一、useRef是怎么回事1.useRef的含义 useRef returns a mutable ref object whose .current property is in...

weixin_39600837的博客 1847

React学习笔记——Hooks中useRef的基础介绍和使用,useRef和createRef的区别

在 React 的世界中,有容器组件和 UI 组件之分,在 React Hooks 出现之前,UI 组件我们可以使用函数,无状态组件来展示 UI,而对于容器组件,函数组件就显得无能为力,我们依赖于类组件来获取数据,处理数据,并向下传递参数给 UI 组件进行渲染。使用 React Hooks 相比于从前的类组件有以下几点好处: 代码可读性更强,原本同一块功能的代码逻辑被拆分在了不同的生命周期函数中,容易使开发者不利于维护和迭代,通过 React Hooks 可以将功能代码聚合,方便阅读维护 组件树层级变浅,

MRlaochen的博客 1844

React利用Antd的Form组件实现表单功能

========2023.2.17更新======== 现在ant.design已进入V5版本,表单基础用法和V4基本一致,代码示例如下:

GuanJdoJ的博客 2万+
上一篇: 处理js小数乘或除以100精度丢失
Nancyeah
博客等级 码龄9年 2粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值