完全摸清react的useEffect

无需清除的Effect的情况

先看设定代码需求:使用useEffect实现标题的更新
用以前的class怎样实现

在这里插入图片描述
以前的方法在生命周期函数里面的组件加载和更新都需要执行一下

而用了Effect Hook之后如下 更方便

import React,{useState,useEffect} from 'react'

const LikeBUtton:React.FC = () =>{
    const [like,setLike] = useState(0)
 

    useEffect(()=>{
        document.title = `点击了${like}次`
    })
    return (
        <>
            <button onClick = {()=>{setLike(like+1)}}>
                {like}
            </button>
        </>
    )

}


export default LikeBUtton

需要清除的Effect(副作用)的情况

实现 点击 重新显示鼠标的位置的组件代码如下

import React,{useState,useEffect} from 'react'

const MouseTrack :React.FC = () =>{
    const [position,setPosition] = useState({x:0,y:0})
    useEffect(()=>{
        const updateMouse = (e:MouseEvent)=>{
            console.log('inner');
            setPosition({x:e.clientX,y:e.clientY})
        }
        document.addEventListener('click', updateMouse)
        return ()=>(
            // 清楚前面的click事件的Effect
            // console.log(1)
            document.removeEventListener('click', updateMouse)
            
        )

    },[])
    console.log("before render",position.x);
    
    return (
        <p>X:{position.x},y:{position.y}</p>
    )
}

export default MouseTrack

如果没有加

        return ()=>(
            // 清楚前面的click事件的Effect
            // console.log(1)
            document.removeEventListener('click', updateMouse)
            
        )

这些代码 ,那么 console.log(‘inner’);会被调用非常多次,每次更新都会调用回调函数里面的click事件,没有清楚副作用,所以上面代码就是清楚副作用的方式
在这里插入图片描述

控制Effect的执行

只在挂载和销毁的时候执行一次

在useEffect的第二个参数,加上空数组的符号
在这里插入图片描述

监测特定值改变时执行useEffect

在这里插入图片描述
在空数组里面写入监测值就可以了

监测组件所有值的改变然后执行useEffect

useEffect只写回调函数,右边不要加参数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值