useRef和useState:
每次渲染的时候都有它独特的事件处理函数,在组件中的任意一次渲染中props和state是始终保持不变的,如果props和state在不同的渲染中是相互独立的话,那么使用到他们的任何值也是独立的。这里面包含事件处理函数,有没有可能让不同的渲染之间发生联系呢,这时候useRef就要登场了。
其中有两个button,当先点击第一个button两下时,然后点击第二个button,第二个button会记录下之前的点击事件那一状态下的like值形成闭包,然后在点击第一个button8下,会发现页面titile会显示“点击了8次”,同时页面内容上会显示一个8的按钮还有一个一个alert按钮,3s之后会显示you clicked on 2,会机制点击第二个button时,那一时刻下like的值。
可以使用const likeRef= useref(0),useRef会返回一个对象,对象有一个属性current,他的值就是我们给他传进去的初始化的值0,使用useRef和我们直接创建一个object有什么区别呢。
const likeRef= useref(0)
const obj={current:0}
区别就是:Ref在所有render里面保持着唯一的引用,因此所有的对ref的赋值或者取值,拿到的都是一个最终的状态,而不会在不同的render之间存在着一定的隔离。
对之前的代码进行修改
最终的结果就是:(过程描述):当点击第一个按钮2下,然后点击alert,在接着点击第一个按钮7下,然后会显示的结果如图。会弹出一个 you clicked on 9。