react中useState、useRef、变量之间的区别

news/2024/7/15 18:14:36 标签: react.js, 前端, javascript

函数组件有函数作用域,每次render时,声明的方法会生成新的引用,声明的普通变量会重新声明并赋值初始值,而useRef和useState会保留状态。

useState、useRef、变量的区别

1. useState

组件更新不会改变之前的状态,可以保存状态。值变化,会render,视图会更新,setState是异步的,同一个函数内设置的,不能实时获取到最新的值。

javascript">const [state, setState] = useState(0)
const fn = () => {
	setState(1)
	console.log(state) //输出0
}

使用场景: 当我们需要在状态改变的时候重新渲染视图,那么我们就使用 useState 来保存我们的状态

2. useRef保存的值

组件更新不会改变之前的状态,可以保存状态。值变化,不会render,视图不会更新。设置的值是同步的,同一个函数内设置的,能实时获取到最新的值。

javascript">const num = useRef(0)
const fn = () => {
	num.current = 1
	console.log(num.current) //输出1
}

使用场景: 如果我们只是想保存状态不影响视图更新,而且可以同步更新&获取我们的状态,那么就使用 useRef。
注意事项:

  • ref.current 不可以作为其他 hooks(useMemo, useCallback, useEffect)依赖项;
  • ref.current 的值发生变更并不会造成 re-render, Reactjs 并不会跟踪 ref.current 的变化。

3. 变量(组件内)

变量在每次组件重新渲染的时候都会被重新进行赋值为初始值,所以如果你想要保留之前操作的状态的话就不要使用变量。
使用场景: 建议组件内不使用

3. 变量(组件外)

组件外定义的 global 变量,是属于全局的。如果代码中有多个相同的组件,那这个 global 变量在全局是同一个,他们会互相影响。


http://www.niftyadmin.cn/n/126303.html

相关文章

【教学典型案例】用户称为设计者的正例

目录一:背景介绍二:设计理念三:设计过程按照设计理念设计的功能:1、用户可以根据自己的情况来选择显示哪些活动参与数据。2、用户可以对请假功能和点读功能进行开启和关闭操作(默认为全部开启)四&#xff1…

java八股系列——依赖注入的方式

依赖注入有三种方式: 构造方法注入 优点:固定依赖注入的顺序,解决循环依赖的问题。缺点:注入过多时会显得臃肿。 setter注入 优点:只有对象是需要被注入的时候,才会注入依赖,而不是在初始化的时…

英语六级写作和翻译模板

一、作文 四六级作文,写不写标题? 题目里有topic/title:直接抄在第一排中间You can start your essay with the sentence “Online libraries are becoming increasingly popular” 这种情况直接把这句话抄在第一句即可。其他情况&#xff…

vue3的组件事件和defineEmits

事件基础 子组件可以触发自定义事件&#xff0c;父组件使用该子组件时&#xff0c;可以监听该组件的事件&#xff0c;并为监听的事件绑定事件处理函数&#xff0c;则当该子组件触发了该事件时&#xff0c;父组件对应的事件处理函数就会执行。 MyComponent.vue <template&g…

简单易懂值得收藏的Spring源码解析,依赖注入和bean的初始化

简单易懂值得收藏的Spring源码解析&#xff0c;依赖注入和bean的初始化原理解析依赖注入PropertyValues、PropertyValue、PropertyAccessorbyNamebyTypeAutowiredbean的初始化源码走读依赖注入populateBean方法autowireByNameautowireByType方法AutowiredAnnotationBeanPostPro…

【CS224W】(task12)GAT GNN training tips

note GAT使用attention对线性转换后的节点进行加权求和&#xff1a;利用自身节点的特征向量分别和邻居节点的特征向量&#xff0c;进行内积计算score。异质图的消息传递和聚合&#xff1a;hv(l1)σ(∑r∈R∑u∈Nvr1cv,rWr(l)hu(l)W0(l)hv(l))\mathbf{h}_v^{(l1)}\sigma\left(\…

PCB布线及后仿真验证过程(干货满满,建议收藏)

一、布线的基本要求 布线次序考虑 1) 规则驱动布线遵循的基本步骤 定义禁布区&#xff0c;或控制区若有规则约束&#xff0c;要求设置规则试布线&#xff0c;评估单板是否可以布通&#xff0c;若不能布通&#xff0c;需要采用策略Fanout后对覆盖率检查&#xff0c;通常要求满…

【游戏逆向】游戏玩家技能冷却分析

技能冷却对于不同的游戏有不同的存放方式,而技能冷却的遍历也大多不会和技能的普通属性放在一起,在《在**明月刀》这款游戏中,技能的冷却判断格外重要,因为技能的连贯性对打怪的效率影响很大。 我们需要找一个冷却相对较长的技能用来进行扫描和过滤,一般选择几十秒即可,…