2 Effect Hook

副作用:和外部有交互

  1. 引用外部变量
  2. 调用外部函数
  3. 修改dom、全局变量
  4. ajax
  5. 计时器(依赖window.setTimeout)
  6. 存储相关

纯函数:相同的输入一定会得到相同的输出
Effect Hook可以让你在函数组件中执行副作用操作

类组件中处理副作用

  • componentDidMount/componentDidUpdate声明周期中(真实dom构建以前)

useEffect执行时机

  • 初次渲染之后 didMount(真实dom构建以后)
  • 渲染更新时 didUpdate
  • 是异步的,在回调函数中拿到更新的state

存在清理函数

  1. 首次执行: render → useEffect
  2. 再次执行: render → 清理函数 → useEffect
  3. 清理函数:组件更新、组件销毁时执行

组件更新

useEffect(() => {
   
    console.log('useEffect')
    return () => {
   
        console.log('clear Effect')
    }
})

在这里插入图片描述

import {
    useState, useEffect } from 'react'
export default function App(props) {
   
    const [count, setCount] = useState(() => {
   
        console.log(1); // 惰性初始化,只会打印一次
        return 1
    });
    useEffect(() => {
   
        // 持续递增
        console.log('useEffect')
        let timer = setInterval(() => {
    // 2. 每一次副作用都会重新初始化一个timer
            setCount(count + 1)
        }, 1000)
        return () => {
   
            clearInterval(timer) // 1.闭包 第二次运行时,先清理上一次的timer
            console.log('clear Effect')
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值