• React 简析useEffect return执行时机


    1. import React, { useState } from "react";
    2. import ReactDOM from "react-dom";
    3. function App() {
    4. const [n, setN] = useState(0);
    5. const onClick = () => {
    6. setN(n + 1);
    7. };
    8. React.useEffect(() => {
    9. console.log("App");
    10. return () => {
    11. console.log("App挂了");
    12. };
    13. });
    14. return (
    15. <div className="App">
    16. <h1>n: {n}h1>
    17. <button onClick={onClick}>+1button>
    18. {/* {n % 2 === 0 ? <B /> : ""} */}
    19. <B />
    20. div>
    21. );
    22. }
    23. function B() {
    24. const [m, setM] = useState(0);
    25. const onClick = () => {
    26. setM(m + 1);
    27. };
    28. React.useEffect(() => {
    29. console.log("B");
    30. return () => {
    31. console.log("B挂了");
    32. };
    33. });
    34. return (
    35. <div>
    36. B组件
    37. <h1>m: {m}h1>
    38. <button onClick={onClick}>+1button>
    39. div>
    40. );
    41. }
    42. const rootElement = document.getElementById("root");
    43. ReactDOM.render(<App />, rootElement);

    注意点:useEffect 是在render结束之后才执行的。

    组件 App 首次渲染后,先执行 console.log("B"); 再执行 console.log("App")

    当执行 n + 1 之后,先执行 console.log("B挂了"),再执行执行 console.log("B"), 再执行 console.log("App挂了"), 最后执行console.log("App"), 程序结束。

    当执行 m + 1 之后,先执行console.log("B挂了"),再执行console.log("B"), 程序结束。

    当组件 App内,使用 useState 创建的变量,发生变化时,会造成重新render,也就导致原组件(包含子组件)的销毁,以及新组件(包含子组件)的诞生。

    可以得出,每次重新渲染,都会导致原组件(包含子组件)的销毁,以及新组件(包含子组件)的诞生

    结论

    1、首先渲染,并不会执行useEffect中的 return

    2、变量修改后,导致的重新render,会先执行 useEffect 中的 return,再执行useEffect内除了return部分代码。

    3、return 内的回调,可以用来清理遗留垃圾,比如订阅或计时器 ID 等占用资源的东西。

    文章参考:React 简析useEffect return执行时机 - 知乎

  • 相关阅读:
    Vue太难啦!从入门到放弃day02——vue常用特性
    第七章 操作位和位串(三)
    Day 64 django csrf操作 auth认证模块 项目功能封装优化
    【全栈开发指南】Mysql8 开启远程登录(docker-compose安装 )
    好的期货公司开户让人省心省钱
    深度学习-梯度下降算法-NLP(五)
    02【Java的IO模型】
    【docker】Docker镜像管理
    css:详解BFC块级格式化上下文
    今日睡眠质量记录78分
  • 原文地址:https://blog.csdn.net/u011200562/article/details/134559358