useRef
定义
const refContainer = useRef(initialValue);
- refContainer对象里会有个current属性,当更新current值时并不会re-render,这是与useState不同的地方
- 更新useRef是side effect(副作用),所以一般写在useEffect或event handler里
- useRef类似于类组件的this
为什么使用useRef
返回的 ref 对象在组件的整个生命周期内保持不变
- 示例1:
由于每次渲染周期获取到的state数据都是本次的,而要达到跨渲染周期就需要采用useRef
由于闭包,函数里的变量值为调用函数时对应的快照like值
import React, { useState } from "react";
const LikeButton: React.FC = () => {
const [like, setLike] = useState(0)
function handleAlertClick() {
setTimeout(() => {
alert(`you clicked on ${like}`)
//形成闭包,所以弹出来的是当时触发函数时的like值
}, 3000)
}
return (
<>
<button onClick={() => setLike(like + 1)}>{like}赞</button>
<button onClick={handleAlertClick}>Alert</button>
</>
)
}
export default LikeButton