React-Hooks-useEffect

简介: React-Hooks-useEffect

useEffect Hook 概述


  • 可以把 useEffect Hook 看做 componentDidMount,componentDidUpdate 和 componentWillUnmount 这三个生命周期函数的组合




useEffect Hook 特点


  • 可以设置依赖, 只有依赖发生变化的时候才执行可以设置依赖, 只有依赖发生变化的时候才执行

示例演示代码如下:

import React, {useState, useEffect} from 'react';
function Home() {
    const [nameState, setNameState] = useState('Jonathan_Lee');
    const [ageState, setAgeState] = useState(0);
    useEffect(() => {
        // componentDidMount
        // componentDidUpdate
        console.log('组件被挂载或者组件更新完成');
        return () => {
            // componentWillUnmount
            console.log('组件即将被卸载');
        }
    });
    return (
        <div>
            <p>{nameState}</p>
            <button onClick={() => {
                setNameState('yangbuyiya')
            }}>修改
            </button>
            <p>{ageState}</p>
            <button onClick={() => {
                setAgeState(ageState + 1)
            }}>增加
            </button>
            <button onClick={() => {
                setAgeState(ageState - 1)
            }}>减少
            </button>
            <hr/>
        </div>
    )
}
export default function App() {
    const [isShowState, setIsShowState] = useState(true);
    return (
        <div>
            {isShowState && <Home/>}
            <button onClick={() => {
                setIsShowState(!isShowState)
            }}>切换Home组件
            </button>
        </div>
    )
}

定义了一个 App 组件,然后在当中用一个按钮来控制 Home 的显示与隐藏,然后呢,点击 Home 组件不同的按钮观察一下生命周期输出到控制台的信息即可。


useEffect Hook 对比类组件生命周期方法的优势:


  • 易于拆分

例如在之前的类组件的生命周期方法,在组件被挂载的时候要做一些其它的事情,就需要全部写在一个方法当中但是用了 useEffect Hook 就可以完美的解决该问题示例如下:

import React, {useState, useEffect} from 'react';
function Home() {
    const [nameState, setNameState] = useState('Jonathan_Lee');
    const [ageState, setAgeState] = useState(0);
    useEffect(() => {
        // 组件被挂载
        console.log('修改DOM');
    });
    useEffect(() => {
        // 组件被挂载
        console.log('注册监听');
        return () => {
            console.log('移出监听');
        }
    });
    useEffect(() => {
        console.log('发送网络请求');
    });
    return (
        <div>
            <p>{nameState}</p>
            <button onClick={() => {
                setNameState('yangbuyiya')
            }}>修改
            </button>
            <p>{ageState}</p>
            <button onClick={() => {
                setAgeState(ageState + 1)
            }}>增加
            </button>
            <button onClick={() => {
                setAgeState(ageState - 1)
            }}>减少
            </button>
            <hr/>
        </div>
    )
}
export default function App() {
    const [isShowState, setIsShowState] = useState(true);
    return (
        <div>
            {isShowState && <Home/>}
            <button onClick={() => {
                setIsShowState(!isShowState)
            }}>切换Home组件
            </button>
        </div>
    )
}




最后


本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
C++ Python
Qt+C++桌面计算器源码
Qt+C++桌面计算器源码
306 0
Qt+C++桌面计算器源码
|
Linux 网络安全 数据安全/隐私保护
FileZilla 将本地文件上传到linux目录
FileZilla 将本地文件上传到linux目录
323 0
|
机器学习/深度学习 PyTorch Go
YOLOv5的Tricks | 【Trick4】参数重结构化(融合Conv+BatchNorm2d)
这篇文章是想要记录yolov5在模型搭建过程中的一个融合模块,就是把卷积与批归一化的参数进行融合,想卷积带有批归一化的性质,使得推理过程中可以加快模型推理速度,简化整个模型结构,实现训练与推理两个阶段的解耦。
1142 0
YOLOv5的Tricks | 【Trick4】参数重结构化(融合Conv+BatchNorm2d)
|
C++ 计算机视觉 Python
Python Yolov5路面裂缝识别检测识别
Python Yolov5路面裂缝识别检测识别
313 0
|
7月前
|
机器学习/深度学习 自动驾驶 计算机视觉
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 GhostNet V1 基于 Ghost Module 和 Ghost Bottlenecks的轻量化网络结构
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 GhostNet V1 基于 Ghost Module 和 Ghost Bottlenecks的轻量化网络结构
309 61
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 GhostNet V1 基于 Ghost Module 和 Ghost Bottlenecks的轻量化网络结构
|
安全 网络协议
最新可靠好用的DNS服务器地址汇总
如果修改DNS服务器地址就可以访问google等服务,你还等什么?使用免费DNS解析服务除了去掉了运营商的各种广告,还有个最大的好处就是不会重定向或者过滤用户所访问的地址,这样就防止了很多网站被电信、网通劫持,有利于提供访问一些国外网站的成功率 如googlecode,网友应该养成不使用默认DNS的习惯,笔者汇总了常用可靠的DNS服务器地址。
15521 0
|
10月前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
1635 7
|
C++
C++ PCL SACSegmentationFromNormals setAxis 轴向的选择
C++ PCL SACSegmentationFromNormals setAxis 轴向的选择
222 2
|
SQL 关系型数据库 MySQL
SQL语句编写的练习(MySQL)
这篇文章提供了MySQL数据库中关于学生表、课程表、成绩表和教师表的建表语句、数据插入示例以及一系列SQL查询练习,包括查询、排序、聚合和连接查询等操作。
|
弹性计算 安全 数据安全/隐私保护
一、基于Fortinet的出海业务访问加速方案--详细部署步骤
本方案基于CADT提供一个一键交付零配置的部署模板,帮助企业快速构建出海业务访问加速的环境。方案结合了Fortinet产品以及阿里云的ECS,BGP公网精品IP等产品,实现低成本的出海业务加速。
573 0