React Hooks --useEffect

2023-11-05

再用class写组件时,经常会用到生命周期函数,来处理一些额外的事情(副作用:和函数业务主逻辑关联不大,特定时间或事件中执行的动作,比如请求后端数据,修改Dom等)在React HookS中也需要类似的生命周期函数,useEffect由此诞生。

由class的形式,声明一个组件,并增加两个生命周期函数componentDidMount和componentDidUpdate

import React, { Component } from 'react';

class Example3 extends Component {
    constructor(props) {
        super(props);
        this.state = { count:0 }
    }


    componentDidMount(){
        console.log(`ComponentDidMount=>You clicked ${this.state.count} times`)
    }
    componentDidUpdate(){
        console.log(`componentDidUpdate=>You clicked ${this.state.count} times`)
    }

    render() { 
        return (
            <div>
                <p>You clicked {this.state.count} times</p>
                <button onClick={this.addCount.bind(this)}>Chlick me</button>
            </div>
        );
    }
    addCount(){
        this.setState({count:this.state.count+1})
    }
}

export default Example3;

用React Hooks的形式实现上面同样的功能

import React, { useState , useEffect } from 'react';
function Example(){
    const [ count , setCount ] = useState(0);
    //---关键代码---------start-------
    useEffect(()=>{
        console.log(`useEffect=>You clicked ${count} times`)
    })
    //---关键代码---------end-------

    return (
        <div>
            <p>You clicked {count} times</p>
            <button onClick={()=>{setCount(count+1)}}>click me</button>
        </div>
    )
}
export default Example;

Effect的两个注意点
1.React首次渲染和之后的每次渲染都会调用一遍useEffect函数,而之前我们要用两个生命周期函数分别表示首次渲染(componentDidMount)和更新导致的重新渲染(ComponentDidUpdate)
2.useEffect中定义的函数的执行不会阻碍浏览器更新视图,也就是说这些函数是异步执行的,而componentDidMount和componentDidUpdate中的代码都是同步执行的。如果我么你要根据页面的大小然后绘制出当前弹出窗口的大小,异步的就不太好控制了。

用useEffect实现componentWillUnmount生命周期函数

主要就是用到了useEffect的第二个参数,它是一个数组,数组中可以写入很多状态对应的变量,意思是当状态值发生变化时,我们才进行解绑。但是当传空数组[]时,就是当组件将被销毁时才进行解绑,这也就实现了componentWillUnmount的生命周期函数。

最后分享一下阮一峰的一篇文章
“轻松学会 React 钩子:以 useEffect() 为例”
http://www.ruanyifeng.com/blog/2020/09/react-hooks-useeffect-tutorial.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Hooks --useEffect 的相关文章

随机推荐

  • python连接hiveserver2_hiveserver2 python client

    一个hiveserver2 python客户端的例子 大部分代码来自于hue 忽略了一些必要的判断 只是做一个简单的例子 需要安装thrift以及把hive 0 10 0 cdh4 3 0 src service src gen thrif
  • python中通过super()调用父类构造方法

    可能是java写多了 当我准备通过super self xxx 这样调用父类的构造方法时候 一直报错 上网查资料 发现python的super 的机制和java还是有很大区别的 首先看一下super 函数的定义 super type obj
  • 对“端到端”原则的理解

    对 端到端 原则的理解 前些天读了两篇论文 一篇是J H Saltzer D P Read和D D Clark在80年代初发表的 The End TO End Arguments in System Design 另一篇是David D C
  • java为什么有些异常throw出去需要在函数头用throws声明,一些就不用。

    https www cnblogs com paul011 p 7850552 html
  • python可以嵌在vba中吗_在python-cod中嵌入VB宏

    要使用WinI的新模块32COM 我在网上找到了以下生成excel的代码 import win32com client as win32 class generate excel def excel self excel win32 gen
  • nginx 的进程建通信机制-共享内存/channel/信号

    nginx是跨平台的库 但以下分享均为基于linux的 nginx 进程间通信的方法 1 共享内存 linux 提供了进程间通信的的共享内存的方式 通过mmap和shmget来获取一块连续的内存 然后通过munmapheshmdt来释放这块
  • vue导出pdf

    vue项目中导出pdf 纯前端操作 有很多时候我们需要在项目中导出pdf文件 其实是利用插件将vue组件渲染成图片 然后将图片添加到PDF文档进行导出 本文用到的插件是html2canvas和jsPDF 文章目录 vue项目中导出pdf 纯
  • 力扣226. 翻转二叉树(递归)

    力扣226 翻转二叉树 递归 翻转一棵二叉树 示例 输入 4 2 7 1 3 6 9 输出 4 7 2 9 6 3 1 递归 1 定义函数功能 函数功能 即这个递归原问题是 给出一颗树 然后翻转它 所以 函数可以定义为 ListNode r
  • Python字典中的值为列表或字典的构造方法

    1 值为列表的构造方法 dic dic setdefault key append value 示例如下 gt gt dic setdefault a append 1 gt gt dic setdefault a append 2 gt
  • 关于点击UIButton弹出键盘,并且键盘的上方还需添加UITextField或者UITextView的解决方法

    最近在做一个项目的时候 有这样一个需求 点击UIButton弹出键盘 键盘的上方还需添加一个输入框 UITextField UITextView 开始的想法是直接设置输入框的 inputAccessoryView 设置后发现键盘根本就没显示
  • 视频中的物理要素——提取人们产生共情的元素

    近几年油管 各种小视频的兴起 似乎在为我们打开一扇门 研究角度来看 人们为什么对小视频如此痴迷 短暂的欲望得到满足 为什么通过视觉刺激 听觉刺激可以在观看吃播的时候 观看者也可以得到同样的对食物满足的情绪刺激 很重要的原因是 我们很需要很需
  • 格式化字符串学习

    常见的格式化字符串函数 输出 函数 基本介绍 printf 输出到 stdout fprintf 输出到指定 FILE 流 vprintf 根据参数列表格式化输出到 stdout vfprintf 根据参数列表格式化输出到指定 FILE 流
  • c++ auto类型用法总结

    一 用途 auto是c 程序设计语言的关键字 用于两种情况 1 声明变量时根据初始化表达式自动推断该变量的类型 2 声明函数时函数返回值的占位符 二 简要理解 auto可以在声明变量时根据变量初始值的类型自动为此变量选择匹配的类型 举例 对
  • 安装Zookeeper和Kafka集群

    安装Zookeeper和Kafka集群 本文介绍如何安装Zookeeper和Kafka集群 为了方便 介绍的是在一台服务器上的安装 实际应该安装在多台服务器上 但步骤是一样的 安装Zookeeper集群 下载安装包 从官网上下载安装包 cu
  • LDAP 入门知识

    LDAP的基本概念 LDAP是轻量目录访问协议 Lightweight Directory Access Protocol 的缩写 是一种基于 客户机 服务器模式的目录服务访问协议 其实是一话号码簿 LDAP是一种特殊的数据库 LDAP 目
  • jpa方法名命名规则

    一 常用规则速查 1 And 并且2 Or 或3 Is Equals 等于4 Between 两者之间5 LessThan 小于6 LessThanEqual 小于等于7 GreaterThan 大于8 GreaterThanEqual 大
  • Auto.js实现i茅台自动化申购

    i茅台自动化申购 文章目录 i茅台自动化申购 前言 一 前提条件 二 代码示例 总结 前言 现在茅台行情十分火热 茅台集团推出了i茅台APP供大家申购 下面介绍使用Auto js实现自动化申购 一 前提条件 需要下载Auto js的apk
  • 40.1自定义组建el-cascader

    1 子组件
  • 51单片机模拟救护车的警报声

    include
  • React Hooks --useEffect

    再用class写组件时 经常会用到生命周期函数 来处理一些额外的事情 副作用 和函数业务主逻辑关联不大 特定时间或事件中执行的动作 比如请求后端数据 修改Dom等 在React HookS中也需要类似的生命周期函数 useEffect由此诞