05|深入理解useRef

基本概念

在 FunctionComponent 中创建 ref 需要使用到useRef这个hook,函数签名如下

const refContainer = useRef(initalValue) 

useRef 函数接收一个初始值,并返回一个可变的(mutable) ref 对象,也就是我们的变量refContainer。这个对象上面会存在一个属性——current,它的默认值就是initalValue。这里有个比较重要的点就是useRef 创建返回的对象是可变的,并且它会在组件的整个生命周期中都存在,这也就以为着无论你在何时何地访问这个对象,它的值永远都是最新的值。

useState 创建出来的值是不可变的(immutable),每一次 render 都是新的值,而 useRef 创建出来的对象始终都是最开始的那个对象,其属性 current可以被赋值。

被 state 的数据更新所折磨的你是不是心里乐开了花儿 🤪 🤪 🤪

能替代useState吗?

不过不要高兴的太早,我们来看下它能不能代替“烦人”的 useState

function App() {const count = useRef(0)const addCount = () => {count.current++}const [num, setNum] = useState(0)const addNum = () => {setNum(num + 1)}const logCount = () => {console.log(count.current)}return (<div><div><span>count:{count.current}</span><span>num:{num}</span></div><button onClick={addCount}>count+1</button><button onClick={logCount}>查看count</button><button onClick={addNum}>更新num,重新render</button></div>)
} 

效果如下👇

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值