首页 > 其他分享 >react Ref 什么时候用,怎么用

react Ref 什么时候用,怎么用

时间:2023-05-12 14:46:20浏览次数:32  
标签:怎么 current React 渲染 Ref react 定时器 组件 ref

何时使用 ref 通常,当你的组件需要“跳出” React 并与外部 API 通信时,你会用到 ref —— 通常是不会影响组件外观的浏览器 API。以下是这些罕见情况中的几个:

  • 存储 timeout ID

  • 存储和操作 DOM 元素

存储不需要被用来计算 JSX 的其他对象。 如果你的组件需要存储一些值,但不影响渲染逻辑,请选择 ref。

例子:

  • 在我们在react使用定时器去操作一些事情,清楚定时器时候我们需要使用ref来记录定时器的id,比如我们开启定时器后,需要在它执行前销毁定时器

 

上面记录定时器使用的是常规局部变量,我们可以在 handleUndo 函数输出timeoutID,发现它是null。为什么呢?我们要理解这个问题需要明白react的渲染机制 一旦组件被初次渲染,您就可以通过使用 set 函数 更新其状态来触发之后的渲染。 在重新渲染之后这个局部变量会丢失原来记录的id所以会输出空,这个时候ref的用处就体现出来了。React 会在每次重新渲染之间保留 ref,所以这种情况下我们应该使用ref。

  • useRef Hook 返回一个对象,该对象有一个名为 current 的属性。最初,myRef.current 是 null。当 React 为这个  创建一个 DOM 节点时,React 会把对该节点的引用放入 myRef.current。然后,你可以从 事件处理器 访问此 DOM 节点,并使用在其上定义的内置浏览器 API。

 

React 不允许组件访问其他组件的 DOM 节点。甚至自己的子组件也不行!这是故意的。Refs 是一个应急方案,应该谨慎使用。手动操作 另一个 组件的 DOM 节点会使你的代码更加脆弱。

 

总结

  • ref 是一个应急方案,用于保留不用于渲染的值。 你不会经常需要它们。
  • ref 是一个普通的 JavaScript 对象,具有一个名为 current 的属性,你可以对其进行读取或设置。
  • 你可以通过调用 useRef Hook 来让 React 给你一个 ref。
  • 与 state 一样,ref 允许你在组件的重新渲染之间保留信息。
  • 与 state 不同,设置 ref 的 current 值不会触发重新渲染。
  • 不要在渲染过程中读取或写入 ref.current。这使你的组件难以预测。

标签:怎么,current,React,渲染,Ref,react,定时器,组件,ref
From: https://www.cnblogs.com/ximenchuifa/p/17394088.html

相关文章

  • useCallback,useMemo, React.memo的区别
     同:useCallback,useMemo和React.memo是三个在React中用于优化性能的方法。它们的主要目标是避免不必要的重新渲染和计算。因为当一个组件的状态发生变化时,React会重新渲染整个组件树。用这三个hook和组件,可以提升性能。 异:下面从属性,接收参数,返回值,意义和案例等方面进行详细地......
  • ref 的用法
    document.getElementById("p").innerHTML相当于 this.$refs.pp.innerHTML this.ref获取指定的元素//使用ref函数来声明对象类型的数据源:具备响应式letemp=ref({salary:7000,name:'Jack'})//通过ref函数声明的响应式数据,需要使用.value来获取数据的......
  • react useReactStore.js
    import{useCallback,useEffect,useMemo,useRef,useState}from'react';import_getfrom'lodash.get';import_setfrom'lodash.set';exportconstKEY_SAVED_TICK_COUNT='KEY_SAVED_TICK_COUNT';exportclassGlo......
  • 三次输错密码后,系统是怎么做到不让我继续尝试的?
    故事背景忘记密码这件事,相信绝大多数人都遇到过,输一次错一次,错到几次以上,就不允许你继续尝试了。但当你尝试重置密码,又发现新密码不能和原密码重复:相信此刻心情只能用一张图形容:虽然,但是,密码还是很重要的,顺便我有了一个问题:三次输错密码后,系统是怎么做到不让我继续尝试的?我......
  • 员工不知道应该制定什么样的目标要怎么办?
    员工不知道应该制定什么样的目标时,可以考虑以下几点:点击免费领取OKR案例库、OKR整套学习视频等资料目标必须与组织和团队的能力最大程度所匹配。如果员工的目标过高或过低,都可能导致他们无法完成任务或丧失动力。目标应该具体明确,而且要用积极正向的语言去表达。比如,如果员工......
  • React笔记-组件通信(六)
    React笔记-组件通信(六)props概念props是组件之间通讯的纽带props也是组件中内置的一个属性通过父级组件传入在类组件里可以直接通过this.props获取注意:props是不可变的(只读)修改需要从传值的组件中修改props改变会使视图重新渲染组件传值父传子在父组件......
  • 2023年母亲节文案怎么写?用便签提前记录
    每年公历5月的第二个星期日是母亲节,而2023年的母亲节也将在5与14日如约而至。为了表达对母亲无私付出的感恩之情,有不少网友会在这一天送给自己母亲一束鲜花、一份礼物。此外还有的人会在微信朋友圈等社交平台发表母亲节文案,来表达对母亲的感恩、祝福。不过还有一些小伙伴不知道......
  • 微软Bing正面对阵谷歌!竞标争夺Firefox默认搜索引擎
    在今早的谷歌I/O大会上,谷歌带来了全新的PaLM2人工智能语言模型,并将用该模型升级Bard对话机器人以及谷歌搜索。但面对来势汹汹的谷歌,微软似乎并不打算退却。根据TheInformation的消息,微软Bing部门的负责人希望与Mozilla达成合作,让Bing取代谷歌成为Firefox浏览器的默认搜索引擎......
  • node_models里面的依赖有错误怎么解决
    1,发现问题最近发现公司有个文档的网站打开很慢,通过浏览器的network查看资源,发现是bootstrap的css和js文件加载不出来,看了一下是国外的cdn,不稳定。2,查找原因知道了访问慢的原因,我们就去项目里面看看这个bootstrap的cdn是哪里引入的,直接进入项目的node_models文件夹,执行grep-lr......
  • nginx 10061: No connection could be made because the target machine actively ref
    nginx10061:Noconnectioncouldbemadebecausethetargetmachineactivelyrefusedit nginx重载配置一直有些不生效,查看后,发现nginx有4个,全部关闭掉,再重开nginx,正常了nginx.exe-squit,可以把正常的nginx退出掉,其他的nginx,任务管理器强制关闭掉startnginx开启nginx,o......