说说你对useEffect的理解,可以模拟哪些生命周期?

一、让函数组件模拟生命周期

  • 默认函数组件没有生命周期
  • 函数组件是一个纯函数,执行完即销毁,自己无法实现生命周期
  • 通过Effect hook把生命周期“钩”到纯函数中
   // 模拟 class 组件的 DidMount 和 DidUpdate
    useEffect(() => {
      console.log('在此发送一个 ajax 请求')
    })
 
    // // 模拟 class 组件的 DidMount
     useEffect(() => {
        console.log('加载完了')
     }, []) // 第二个参数是 [] (不依赖于任何 state)
 
     // 模拟 class 组件的 DidUpdate
     useEffect(() => {
         console.log('更新了')
     }, [count, name]) // 第二个参数就是依赖的 state
 
    // 模拟 class 组件的 DidMount
    useEffect(() => {
        let timerId = window.setInterval(() => {
            console.log(Date.now())
        }, 1000)
 
        // 返回一个函数
        // 模拟 WillUnMount 组件销毁的时候 停止计时器
        return () => {
            window.clearInterval(timerId)
        }
    }, [])

总结:

模拟componentDidMount - useEffect 依赖 [ ] 模拟compenentDidUpdate -
useEffect 无依赖 ,或者 依赖 [a,b,c] 模拟componentWillUnMount - useEffect
中返回一个函数

react在16.8之后有了新特性 react hooks

之前的主要的生命周期为:

初始化

在组件初始化阶段会执行

constructor
componentWillMount()
render()
componentDidMount()

更新阶段

props或state的改变可能会引起组件的更新,组件重新渲染的过程中会调用以下方法:

componentWillReceiveProps()
shouldComponentUpdate()
componentWillUpdate()
render()
componentDidUpdate()

卸载阶段

componentWillUnmount()

useEffectReact中的一个钩子函数,用于处理组件的副作用。通过传入一个回调函数和一个依赖项列表,可以实现模拟类似于组件生命周期的功能。 使用useEffect可以执行一些希望在特定情况下触发的操作。比如,可以在组件挂载后执行一些初始化的操作,模拟componentDidMount;也可以在组件更新后执行一些操作,模拟componentDidUpdate;还可以在组件卸载前执行一些清理操作,模拟componentWillUnmount。 具体使用时,可以在useEffect的回调函数中执行相应的逻辑操作,并且在依赖项列表中指定需要监听的状态。只有当依赖项中的状态发生变化时,回调函数才会被触发。 在使用useEffect时,建议根据业务逻辑的复杂性将其拆分为多个useEffect,以提高代码的可维护性。例如,如果一个组件需要向两个不同的API接口请求数据,就应该将它们分别写在两个独立的useEffect中,而不是集中在一个useEffect中。这样在将来需要修改某个API接口时,只需要修改对应的useEffect,而不会影响其他部分的代码。 需要注意的是,条件判断应该写在useEffect的回调函数内部而不是外部,以确保条件判断的准确性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [你对useEffect理解,可以模拟哪些生命周期?](https://blog.csdn.net/weixin_61029090/article/details/129675254)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [深入学习React Hook——useEffect](https://blog.csdn.net/m0_47670683/article/details/124397676)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏兮颜☆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值