React-Hooks使用之useEffect

今天来聊一聊useEffect的基本使用叭~~

useEffect() 相当于代替了类式中的两个生命周期函数:componentDidMount和componentDidUpdate(这两个生命周期不会的宝子们得先看看react基础哦),表示组件第一次进入页面渲染 和 更新时都会执行,具体看如下代码:

const EffectStudy = () => {
  //计数器
    const [ count , setCount ] = useState(0);
    useEffect(()=>{
        console.log(`useEffect:点击${count}`)
    })
  return (
    <div>
      <p>数值:{count} </p>
      <button onClick={()=>{setCount(count+1)}}>点击+1</button>
    </div>
  );
};

控制台输出的结果:
在这里插入图片描述
当我页面计数器增加进行更新时,就会再次进行调用
在这里插入图片描述

ok,这是最基本的使用,useEffect还有第二个参数,是一个数组,形式就是useEffect(()=>{},[ ])
来看看案例叭:

function Main () {
  useEffect(() => {
    console.log("进入到Main页面....");
  })
  return <h3>Main页面</h3>
}
function Details () {
  useEffect(() => {
  console.log("进入到Details页面...");
  })
  return <h3>Details</h3>
}
/**
   UseEffect副作用函数
 * 
 */
const EffectStudy = () => {
  //计数器
    const [ count , setCount ] = useState(0);
    useEffect(()=>{
        console.log(`useEffect:点击${count}`)
    })
  
  
  return (
    <div>
      <p style={{margin:"30px"}}>数值:{count} </p>
      <button style={{ marginLeft: "30px" }} onClick={() => { setCount(count + 1) }}>点击+1</button>
      <p>--------------------------------------------------------------------------------------</p>

      <Router>
        <ul>
          <li><Link to='/'>点击进入Mian</Link></li>
          <li><Link to='/details/'>点击进入Details</Link></li>
        </ul>
        <Routes>
             <Route path='/' exact element={<Main/>}/>
        <Route path='/details' element={<Details/>}/>
     </Routes>

      </Router>
    </div>
  );
};

控制台结果:
在这里插入图片描述
我们知道useEffect() 是第一次渲染和更新时都会执行,所以在我点击计数器时,Details页面也会进行更新重新执行,那么如何在组件结束后进行卸载释放呢,就像原来类式组件的componentWillUnmount 生命周期函数功能一样,这就需要用到useEffect的第二个参数咯:

当第二个参数为空时:
在这里插入图片描述
我们给这两个 路由组件的副作用都加上一个空的数组,
路由不在该组件时,就不会重新渲染不会执行,看控制台:
在这里插入图片描述
我们可以看到,在我由调到一个路由后,再次点击计数器,页面重新渲染时不会再导致该路由界面重新渲染。也就是说此时的路由界面只会执行一次。

当第二个参数不为空时:
以计数器为例,给计数器的useEffect加上第二个参数:
第二个参数为空数组:
在这里插入图片描述
控制台:
在这里插入图片描述
只有第一次渲染时打印了,后面计数器增加并没有打印

那我们再来看看第二个参数非空时:
在这里插入图片描述
控制台:
在这里插入图片描述
我们可以看到第二个参数绑定了当前计数器的状态,所以计数器每次状态更新,都会导致useEffect重新执行。

简单的说就是useEffect的第二个参数为空数组,则只会在界面渲染一次。而第二个参数绑定了组件中的某个状态,则该状态若更新则会带动useEffect再次执行,跟第二个参数保持联动性。

另外,补充一下useEffect是异步执行的,所以在它内部定义的函数并不会阻碍页面执行哦,所以这一点又跟类式的两个生命周期函数不一样。

今天的分享就到此结束啦,你看懂了嘛。
知识点要多练才能变成自己的哦~
欢迎各位大佬留言指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值