useEffect的return回调函数是在下一个useEffect被执行的时候才运行吗? 老师可以在帮我梳理一下顺序吗?

来源:3-4 学习自定义Hook - 用useDebounce减少工程搜索请求频率

JerryGor

2021-02-06

图片描述

老师可以再帮我梳理一下useEffect 的 return callback什么时候被运行吗?我console log 了一些信息,暂时的理解是:
假设 delay = 5

    1. useEffect#1 执行: setTimeout被call -> ( ) => { setDeboucedValue(value) } 这个函数会在五秒后被执行。
    1. 这个时候value被改变, useEffect#2 执行,这个时候useEffect#1的callback运行,清理了useEffect#1里的timer,然后在useEffect#2里 setTimeout被call -> ( ) => { setDeboucedValue(value) } 这个函数会在五秒后被执行,以此类推。
    1. 直到最后一个useEffect,没有新的useEffect出现来清掉timeout, setDebouncedValue才被运行,debouncedValue才最终被更新。

那是不是说,只有下一个useEffect的出现才会让上一次useEffect的callback运行呢? 我这样的理解对吗?

谢谢老师!

写回答

2回答

qq_skywalker_23855555

2021-02-16

看官方文档一清二楚 

https://zh-hans.reactjs.org/docs/hooks-effect.html#%E4%BD%BF%E7%94%A8-hook-%E7%9A%84%E7%A4%BA%E4%BE%8B

0
0

Nolan

2021-02-06

你在这里的理解是对的,对于useEffect,useEffect内部运行之前,会执行上一次useEffect返回的回调函数

0
2
Nolan
回复
大艾尔
只要理解了这些原理写出来的代码会很容易理解
2021-03-22
共2条回复

React17+Hook+TS4 优质实践,仿 Jira 企业级项目

解锁 React17 高阶用法,轻松应对大型复杂长周期项目

2691 学习 · 1236 问题

查看课程