格式

useEffect(() => {// 副作用函数的内容return 副作用函数的返回值
}, [])

副作用函数的返回值是可选的,可省略。也可以返回一个清理函数,用来清理副作用

useEffect(() => {// 副作用函数的内容return ()=>{ /* 做清理工作*/ } // 清理函数
}, [])

清理函数的执行时机:

  • 清理函数在组件卸载时以及下一次副作用函数调用之前执行
  • 点击按钮清除鼠标移动事件
  • 点击按钮清除组件 类似componentWillUnmount  组件卸载的钩子函数
  • /* eslint-disable no-unused-vars */
    /* eslint-disable no-use-before-define */
    import React, { useEffect, useState } from 'react'
    import ReactDOM from 'react-dom'
    // console.log(useEffect, useState)
    class Com extends React.Component {render () {return (<div>com</div>)}
    }
    export default function Clear () {const [count, setCount] = useState(5)const [isShow, setShow] = useState(true)useEffect(() => {console.log('useEffect执行了', useEffect)return () => {console.log('useEffect的清理函数执行了', '副作用函数的清理函数')}})const hClick = () => {setShow(false)}return (<div>副作用的清理函数count:{count}{isShow ? <Com /> : ''}   {isShow&&<Com />}<button type="button" onClick={hClick}>点击创建组件</button></div>)
    }ReactDOM.render(<Clear />, document.getElementById('root'))

    组件的销毁与创建

    /* eslint-disable no-unused-vars */
    /* eslint-disable no-use-before-define */
    import React, { useEffect, useState } from 'react'
    import ReactDOM from 'react-dom'
    // console.log(useEffect, useState)
    class Com extends React.Component {render () {return (<div>com</div>)}
    }
    export default function Clear () {const [count, setCount] = useState(5)const [isShow, setShow] = useState(true)useEffect(() => {console.log('useEffect执行了', useEffect)return () => {console.log('useEffect的清理函数执行了', '副作用函数的清理函数')}})const hClick = () => {setShow(!isShow)}return (<div>副作用的清理函数count:{count}{isShow ? <Com /> : ''}<button type="button" onClick={hClick}>点击创建组件</button></div>)
    }ReactDOM.render(<Clear />, document.getElementById('root'))
  • // eslint-disable-next-line no-use-before-define
    import React, { useEffect, useState } from 'react'
    import ReactDOM from 'react-dom'
    console.log(useEffect)
    export default function App () {// eslint-disable-next-line no-unused-vars// 定义显示的状态const [isShow] = useState(true)const [count, setCount] = useState(10)console.log(setCount)// 声明鼠标移动的事件function move (e) {console.log(e.clientX, e.clientY)}useEffect(() => {// 鼠标移动的事件window.addEventListener('mousemove', move)// 清理副作用的函数return () => {window.removeEventListener('mousemove', move)}})return (<div>清理副作用{count}<button type="buttton" onClick={() => isShow && <App />}>组件卸载</button></div>)
    }
    ReactDOM.render(<App />, document.getElementById('root'))

useEffect-副作用函数的返回值-清理副作用的写法相关推荐

  1. wpf 窗口的返回值_如何:获取页函数的返回值

    如何:获取页函数的返回值How to: Get the Return Value of a Page Function 03/30/2017 本文内容 本示例显示如何获取页函数的返回值.This ex ...

  2. getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析...

    2013-07-18 21:35:58 getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析. char是字符型数 ...

  3. ajax回调函数的返回值,使用ajax和回调函数向函数传递/返回值

    我试图读p_info函数返回从函数getproductInfo包含ajax调用,但我得到未定义的值.我使用回调函数来实现这一点,但仍然无法正常工作.我错在哪里?使用ajax和回调函数向函数传递/返回值 ...

  4. Long类型传到前端失去精度(2):Long类型不是实体类的某一个字段,Long类型是一个函数的返回值

    Long类型传到前端失去精度(2):Long类型不是实体类的某一个字段,Long类型是一个函数的返回值 又是转换Mybatis-Plus的一天,又遇到了之前熟悉的问题:Long类型传到前端失去精度.可 ...

  5. C++知识点8——函数的返回值

    函数的返回值不能是数组或函数,但是可以是是数组和函数的指针或引用 函数返回一个值的过程和初始化完全一致,先创建一个临时变量,用返回值初始化该临时变量,然后用该临时变量去初始化另一个变量或者给另一个变量 ...

  6. 函数的初识;函数的返回值;函数的传参

    函数的初识: 避免重复代码,增强可读性. 函数是以功能为导向的. def 函数名(形参): 函数体 函数名() 实参 def 关键字 函数名(与变量命名规则一样) 1.由数字字母下划线组成 2.不能由 ...

  7. Swift2.0语言教程之函数的返回值与函数类型

    Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有 ...

  8. Python基本语法_函数_返回值

    目录 目录 前言 函数的返回值 在函数中Return和Print的区别 函数中的文档 前言 函数的返回值是函数重要的组成部分.函数的根本在于实现程序的部分功能,所以很多时候我们需要将函数执行后的结果返 ...

  9. java 函数参数 返回值_java中如何用函数返回值作为post提交的参数?

    1.我想实现的功能是在java程序中导入HttpURLConnection类,然后将函数的值作为post方法要提交的参数,最后显示在显示台上. 2.要用到的函数是自己写的可以显示实时计算机cpu.内存 ...

最新文章

  1. 超强Redis数据类型与应用场景总结!!
  2. [CF482B]Interesting Array
  3. 晒晒公司整改后的拓扑图和设备
  4. java动态生成柱状图3D_在android上动态实现ichartjs的3D柱形图
  5. elasticsearch6.x {error:Content-Type header [application/x-www-form-urlencoded] is not supported
  6. 简述大数据的数据管理方式_智能销售服务商荣登TOP100榜,大数据线上获客方式再得认可...
  7. C/C++不同文件夹下包含头文件的方法及#include的使用
  8. 可持久化Splay 学习笔记
  9. java jsp 传递参数的方法,jsp传参方法小结
  10. spring 自动扫包代码放置的位置问题
  11. 【图像分割】基于matlab随机游走算法图像分割【含Matlab源码 149期】
  12. 台服DNF修改Script.pvf文件修改黑钻抽奖机的道具爆率,图文详解
  13. unity简单的粒子特效的制作
  14. Apple Pay 详解
  15. python多条件求和_python – Numpy:条件求和
  16. 【反演复习计划】【COGS2433】【bzoj3930,CQOI2015选数】爱蜜莉雅的冰魔法
  17. 智能建筑弱电工程基本的一些施工项目
  18. 异次元发卡网邮箱SMTP配置教程
  19. 浅析互联网金融对传统金融的影响
  20. 学点历史-欧洲君主命名

热门文章

  1. 猫耳FM音频转换成MP3格式
  2. 部署haproxy代理,搭建基于nginx的高性能反向代理群集
  3. 扫地机器人杂牌的怎么样_小户型用扫地机器人好吗?家用扫地机器人哪个牌子好?...
  4. 安装Go,配置Go环境(实力亲测)
  5. java编程——案例1:模拟购物车
  6. 直播软件与微信小程序的测试点
  7. 世界首款抗量子攻击商用密码芯片 | 沐创
  8. 【NOIP2013模拟】粉刷匠
  9. 微博舆情热点挖掘项目——A+项目
  10. LinkedList集合基本操作(代码+注释)