react hooks useEffect的依赖为空时,函数内获取的状态state的值总是不变?

示例

  const [state,setState]=useState(1)
  
  useEffect(()=>{
    setInterval(() => {
      console.log(state)//每秒打印一次state
    }, 1000);
  },[])//依赖为空

    <div className="App">
      <h2>{state}</h2>
      <button onClick={()=>{setState(state=>state+1)}}>加一</button>
    </div>

现象

当我们改变state值的时候,发现useEffect中打印的state值没有变化在这里插入图片描述

原因

useEffect依赖为空时候,只会执行一次,即在第一次渲染的时候执行,所以state的值拿的永远都是第一次渲染时候的初始值。

如果想拿到或设置时候是最新的state的值呢?

设置值
setState(state=>state+1) //利用setState时候箭头函数作用,这样每次获取的state都是最新的值

  useEffect(()=>{
    setTimeout(() => {
      setState(state=>{
        console.log(state)
        return state+1
      })
    }, 3000);
  },[])

我只按了三下,最后是延长器里面加的,state的值是最新的。
在这里插入图片描述
获取值
useEffect(()=>{},[state]) //依赖于state

  useEffect(()=>{
    console.log(state)
    //setState(state+1) 可别这么写喔 死循环喔 
  },[state])
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值