首页 > 其他分享 >useEffect中return语句的执行时机

useEffect中return语句的执行时机

时间:2024-02-19 20:14:39浏览次数:23  
标签:语句 执行 console log 111 return useEffect

概要:在开发过程中我发现了一个问题,在useEffect中写的return函数并没有执行,于是在此基础上进行了查证和测试.

一、useEffect的使用方法

1.两个参数,第二个参数为空数组

useEffect(()=>{
        console.log('111')
},[]) 

结果:执行一次

2.两个参数,第二个参数不为空数组

这里的detailData是一个变量,在整个过程中会发生变化,变化的过程就不展示了

  useEffect(()=>{
        console.log('111')
    },[detailData]) 

 

结果:执行两次

 

3.一个参数

 useEffect(()=>{
        console.log('111')
    })

  

结果:执行次数大于两次

 

二、不同useEffect执行时机的不同

对应第一点里面不同的使用方式分别为

1.只有默认的一次

2.默认的一次加上依赖项的改变次的时候

3.组件渲染的的时候

 

三、useEffect中return语句的执行时机

官网写道:

这个上一个effect指的是什么?

写的effect的数量吗?

useEffect(()=>{
        console.log('111')
        return ()=>{
            console.log('111')
        }
    },[])
    useEffect(()=>{
        console.log('111')
    },[])

 

结果:未执行

 

所以这里的上一个是指同一个effect上一次执行的时候.

为了证明,我们可以在一的基础上做以下改变

1.

useEffect(()=>{
        console.log('111')
        return ()=>{
            console.log('111')
        }
    },[])

 

同上面那个截图,reutn里面的函数未执行

2.

为了区分,我声明一个全局变量n,每次进入该effect时n+1,然后打印这个n

 useEffect(()=>{
        n+=1
        console.log('111')
        return ()=>{
            console.log('111',n)
        }
    },[detailData])

 

结果:

effect进来了两次,return里面打印了第一个n

 

3.

useEffect(()=>{
        n+=1
        console.log('111')
        return ()=>{
            console.log('111222',n)
        }
    })

  

结果:

return里执行的次数比effect里少一次,而且是最后一次

 

结论:useeffect里的return会在改每次进入的时候注册进去,然后在下次会执行上一次注册的函数

  

 

  

 

标签:语句,执行,console,log,111,return,useEffect
From: https://www.cnblogs.com/Shyno/p/18021848

相关文章

  • MogDB 学习笔记之 -- truncate 属于dml语句
    概念描述验证create语句、alter语句、truncate语句、drop语句是属于ddl还是dml测试验证1、环境准备修改log_statement参数miao=#showlog_statement;log_statement---------------none(1row)miao=#ALTERDATABASEmiaoSETlog_statementTOddl;ALTERDATABA......
  • 解决MyBatis Mapper 的XML文件SQL语句无法自动提示问题
    一、问题1.问题场景IDEA中MyBatis编写mapper的SQL语句的时候无法提示SQL和数据库2.问题描述无法正常方便的使用IDEA的提示功能,更准确无误的编写代码3.本解决方案优势亲测可用,一劳永逸(IDEA版本IntelliJIDEA2021.1.3 )目的在于对Mybatis的Mapper.XML中sql语句进行提示......
  • 存储过程分页以及参数拼接sql语句
    1.C#调用存储过程,带参数返回的功能,而且是参数化拼接,这样就可以防止sql注入System.Data.SqlClient.SqlParameter[]parameters={newSystem.Data.SqlClient.SqlParameter("@i",100),......
  • [Go] Get used to return (*SomeType, error) as function return type
    packagemainimport( "fmt" "log" "strconv" "strings")typePointstruct{ xint yint}typeLinestruct{ p1*Point p2*Point}funcgetInput()string{return`0,9->5,98,0->0,89,4->......
  • 02 SQL更新语句执行流程
    02SQL更新语句执行流程与查询流程不一样的是,更新流程还涉及两个重要的日志模块。​redolog(重做日志)和binlog(归档日志)​redolog物理日志binlog逻辑日......
  • finally语句块相关面试题
    publicstaticvoidm(){try{System.out.println("try...");System.exit(0);}finally{System.out.println("finally...");}}上述程序中,finally语句块中的内容还能被执行吗?答:不能被执行......
  • linux awk语句中next 和 continue的区别
     next是跳过当前行(awk自身是列循环和行循环的结合);continue是跳过当前循环(跳过列循环); 001、next;跳过当前行(base)[b20223040323@admin1test2]$lsa.txt(base)[b20223040323@admin1test2]$cata.txt##测试文本001002003004005006007008......
  • 2024-02-16-物联网C语言(数据类型与语句)
    1.第一个C语言程序#include<stdio.h>intmain(){printf("helloworld");return0;}输出结果PSD:\04_Dev\05_C\01数据类型与语句\output>&.\'01_first.exe'helloworld1.1关键字c语言已经定义好的名字,直接拿过来用即可1.1.1数据类型相关的关键字作用:用......
  • SQL语句分类
    SQL语句分类DQL:数据查询语言(凡是带有select关键字的都是查询语句)DML:数据操作语言(凡是对表当中的数据进行增删改的都是DML)insert:增,delete:删,update:改(这里的增删改是对表中的数据进行的操作)DDL:数据定义语言(凡是带有create、drop、alter的都是DDL)create:新建,drop:删除,alter......
  • Go 100 mistakes - #7: Returning interfaces
       Allinall,inmostcases,weshouldn’treturninterfacesbutconcreteimplementa-tions.Otherwise,itcanmakeourdesignmorecomplexduetopackagedependencies andcanrestrictflexibilitybecausealltheclientswouldhavetorelyonthesam......