React之userEffect的使用

embedded/2025/3/11 8:40:19/

一、userEffect是什么

        在React组件中,副作用操作是指那些会被影响的其他的组件,而且不能在渲染过程中完成相关操作。其中,常见的副作用就是从API接口中获取数据。而 useEffect 提供了一种在函数组件中处理副作用的方式,使得函数组件也能处理这些复杂的逻辑。

二、怎么使用

        useEffect 函数接收两个参数:

  • 第一个参数:是一个回调函数,该回调函数包含了副作用操作的代码。
  • 第二个参数:是一个可选的依赖项数组,用于控制 useEffect 的执行时机。
  • 回调函数、依赖项
  • import React, { useEffect } from 'react';function Example() {useEffect(() => {// 副作用操作代码console.log('副作用操作执行');}, []); // 依赖项数组return <div>示例组件</div>;
    }export default Example;

 三、不同的使用场景

        1、.仅在组件挂载时执行一次(依赖项数组为空)
import React, { useEffect } from 'react';function ComponentDidMountExample() {useEffect(() => {console.log('组件挂载完成');// 清理函数,在组件卸载时执行return () => {console.log('组件卸载');};}, []);return <div>仅在挂载时执行一次的示例</div>;
}export default ComponentDidMountExample;
         2、在组件挂载和更新时都执行(不传递依赖项数组)
import React, { useState, useEffect } from 'react';function EveryRenderExample() {const [count, setCount] = useState(0);useEffect(() => {console.log('组件挂载或更新');});return (<div><p>计数: {count}</p><button onClick={() => setCount(count + 1)}>增加</button></div>);
}export default EveryRenderExample;
3、仅在特定依赖项变化时执行
import React, { useState, useEffect } from 'react';function DependencyChangeExample() {const [count, setCount] = useState(0);const [name, setName] = useState('');useEffect(() => {console.log('count 或 name 发生变化');}, [count, name]);return (<div><p>计数: {count}</p><button onClick={() => setCount(count + 1)}>增加</button><inputtype="text"value={name}onChange={(e) => setName(e.target.value)}/></div>);
}export default DependencyChangeExample;

四、使用的好处

        代码复用useEffect 可以将副作用逻辑封装在一个函数中,提高代码的复用性。

        逻辑分离:将副作用操作与组件的渲染逻辑分离,使代码更加清晰和易于维护。

        函数式编程:使用 useEffect 可以在函数组件中处理副作用,避免了类组件的复杂性,使代码更符合函数式编程的思想。


http://www.ppmy.cn/embedded/171715.html

相关文章

工业数据采集与控制:ARM一体机的低功耗高可靠性方案

在工业4.0和智能化转型的浪潮下&#xff0c;传统工业现场的数据采集与控制方式正在被颠覆。过去&#xff0c;工业现场的数据采集和控制往往依赖于分散的设备和复杂的系统集成&#xff0c;而如今&#xff0c;ARM工业现场采集控制看板显示一体机的出现&#xff0c;为工业自动化带…

2线性表之链表

1.链表 链表是一种 物理存储结构上非连续、非顺序 的存储结构&#xff0c;数据元素的 逻辑顺序 是通过链表中的 指针链接 次序实现的 。 关于顺序表的不足&#xff1a; 扩容有性能消耗且有可能存在空间浪费。 扩容时&#xff0c;如果扩小了&#xff0c;大量插入数据时&#xff…

Python大数据可视化:基于大数据技术的共享单车数据分析与辅助管理系统_flask+hadoop+spider

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 场地信息界面 单车信息界面 归还信息界面 共享单车界面 系…

Unity 通用UI界面逻辑总结

概述 在游戏开发中&#xff0c;常常会遇到一些通用的界面逻辑&#xff0c;它不论在什么类型的游戏中都会出现。为了避免重复造轮子&#xff0c;本文总结并提供了一些常用UI界面的实现逻辑。希望可以帮助大家快速开发通用界面模块&#xff0c;也可以在次基础上进行扩展修改&…

STM32如何精准控制步进电机?

在工业自动化、机器人控制等场合&#xff0c;步进电机以其高精度、开环控制的特性得到了广泛应用。而在嵌入式系统中&#xff0c;使用STM32进行步进电机的精确控制&#xff0c;已成为开发者的首选方案之一。 本文将从嵌入式开发者的角度&#xff0c;深入探讨如何基于STM32 MCU…

【JavaEE】SpringBoot快速上手,探秘 Spring Boot,搭建 Java 项目的智慧脚手架

1.Spring Boot介绍 在学习SpringBoot之前, 我们先来认识⼀下Spring &#xff0c;我们看下Spring官⽅的介绍 可以看到&#xff0c;Spring让Java程序更加快速, 简单和安全。 Spring对于速度、简单性和⽣产⼒的关注使其成为世界上最流⾏的Java框架。 Spring官⽅提供了很多开源的…

ERROR:L6002U 一种解决方案

1.问题描述 前面的文章也讲到过有一次出现&#xff0c;这次再看一下为什么 打开这个文件&#xff0c;以及它的头文件 源文件报错信息&#xff1a; 2、原因查找 这是由于不同的人上传不同的工程&#xff0c;拉取更新导致的&#xff0c;可能的原因是keil文件夹的组织方式。 很…

Spring Boot/Spring Cloud 整合 ELK(Elasticsearch、Logstash、Kibana)详细避坑指南

我们在开发中经常会写日志&#xff0c;所以需要有个日志可视化界面管理&#xff0c;使用ELK可以实现高效集中化的日志管理与分析&#xff0c;提升性能稳定性&#xff0c;满足安全合规要求&#xff0c;支持开发运维工作。 下述是我在搭建ELK时遇到的许许多多的坑&#xff0c;希望…