首页 > 其他分享 >useEffect为函数组件添加“副作用”

useEffect为函数组件添加“副作用”

时间:2024-09-24 15:52:26浏览次数:3  
标签:function 生命周期 副作用 卸载 组件 挂载 useEffect


最近在学习React,用了Hooks了,Hooks虽然好用,但是对于刚上手Hooks的小伙伴来说,可能不太理解useEffec和类组件中生命周期方法之间的关系,所以决定总结一下。如有不对,请多多指正!

什么是副作用

副作用是相对于主作用来说的,一个函数除了主作用,其他的作用就是副作用。对于 React 组件来说,主作用就是根据数据(state/props)渲染 UI,除此之外都是副作用(比如,手动修改 DOM)

常见的副作用

  1. 数据请求 ajax发送
  2. 手动修改dom
  3. localstorage操作

useEffect函数的作用就是为react函数组件提供副作用处理的!

使用步骤

  1. 导入 useEffect 函数
  2. 调用 useEffect 函数,并传入回调函数
  3. 在回调函数中编写副作用处理(dom操作)
  4. 修改数据状态
  5. 检测副作用是否生效

讲述概念优点不好理解,直接上代码

父组件

useEffect为函数组件添加“副作用”_react.js

import React, { useState } from "react";
import Child from "./components/Child";

export default function App() {
  //是否显示子组件
  let [isShow, setShow] = useState(false);
  return (
    <div style={{ backgroundColor: "#cfc" }}>
      <h1>父组件(APP)</h1>
      <button onClick={() => setShow(!isShow)}>挂载/卸载子组件</button>
      {isShow && <Child />}
    </div>
  );
}

子组件

useEffect为函数组件添加“副作用”_生命周期_02

import React, { useEffect, useState } from "react";

export default function Child() {
  //状态变量
  let [count, setCount] = useState(0);
  let [age, setAge] = useState(18);
  
  //1.组件挂载/数据更新的生命周期方法
  useEffect(function () {
    console.log("1-生命周期--组件挂载/更新时调用");
    //约等价于  componentDidMount +  componentDidUpdate
  });
  
  //2.组件挂载/特定数据更新时的生命周期方法
  useEffect(
    function () {
      console.log("2-生命周期--组件挂载/特定数据更新时调用");
    },
    [age]
  );
  
  //3.组件挂载时的生命周期方法
  useEffect(function () {
    console.log("3-生命周期--组件挂载时调用");
    //约等价于  componentDidMount
    //只会在组件挂载时触发
  }, []);
  
  //4.组件更新/卸载时的生命周期方法
  useEffect(function () {
    return function () {
      console.log("4-生命周期--组件更新/卸载时调用");
      //等价于  componentDidMount  +  componentWillUnmount
      //任何状态更新时+卸载时都会触发
    };
  });
  
  //5.组件卸载时的生命周期方法
  useEffect(function () {
    return function () {
      console.log("5-生命周期--组件卸载时调用");
      //等价于   componentWillUnmount
      //只会在组件卸载时触发
    };
  }, []);

  return (
    <div style={{ backgroundColor: "#ccf", margin: "30px", padding: "30px " }}>
      <h1>子组件(Child)</h1>
      <button onClick={() => setCount(count + 1)}>当前点击次数:{count}</button>
      <button onClick={() => setAge(age + 1)}>年龄:{age}</button>
    </div>
  );
}


标签:function,生命周期,副作用,卸载,组件,挂载,useEffect
From: https://blog.51cto.com/u_17032682/12100507

相关文章

  • springcloud中sentient整合openfeign组件
    openfeign作为微服务各个模块之间调用的组件,如果服务提供方出现异常,会将错误返回给服务消费方,消费方可以通过sentinel的服务降级方法,对如果调用异常的情况进行处理以下介绍下具体做法:一、服务消费方必须整合openfeign,方法可以参考:https://www.cnblogs.com/qwg-/p/18007449pom.x......
  • 【组件】前端js HEIC/HEIF 转换为JPEG、PNG或GIF格式 苹果格式
    【组件】前端jsHEIC/HEIF转换为JPEG、PNG或GIF格式Heic2any:Client-sideconversionofHEIC/HEIFimagefilestoJPEG,PNG,orGIFinthebrowser.https://alexcorvi.github.io/heic2any/#demoGitHub-alexcorvi/heic2any:ConvertingHEIF/HEIFimageformatstoPNG/GIF/J......
  • 万象更新 Html5 - vue.js: vue 组件 1
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-vue.js:vue组件1示例如下:vue\component\sample1.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>vue组件1</t......
  • 万象更新 Html5 - vue.js: vue 组件 2
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-vue.js:vue组件2示例如下:vue\component\sample2.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>vue组件2</t......
  • Vue组件使用/单个组件的生命周期
    props和$emitprops:用于父组件传递data数据给子组件,比如在index.vue中,data函数里面有个list数据,把它传给List组件(下图1),在List组件内用list属性来接收(下图2)$emit:事件触发,在index.vue中在两个子组件内传入了两个方法:adddelete。这俩方法作为父组件给子组件的两个......
  • 好用的js表格组件tabulator使用
    偶然中看到了这个功能强大的表格组件,不仅支持分页、过滤、排序、树形表格等常见的功能,且支持分组显示、表格内编辑、统计计算、读本地文件、拖拽表格改变行列顺序、下载、像在excel文件中操作一样的编辑等多种功能。常用配置项及表格实例化查看代码<linkhref="../plugins/tab......
  • Axure精选各类组件案例集锦:设计灵感与实战技巧
    在设计大屏页面时,设计师们面临着如何构建丰富、直观且用户友好的界面的挑战。幸运的是,Axure等强大的原型设计工具提供了丰富的可视化组件库,为设计师们提供了无限的设计灵感和实战技巧。本文将通过精选的各类组件案例,探讨大屏设计中常用组件的应用场景与设计要点。大标题:引领视觉焦......
  • Hadoop三大组件之HDFS(一)
    1.HDFS的架构HDFS(HadoopDistributedFileSystem)采用主从架构,由一个NameNode(主节点)和多个DataNode(从节点)组成。NameNode负责管理数据块映射信息(如文件名、文件目录、权限、块位置等)并配置副本策略,而DataNode负责存储实际的数据块。SecondaryNameNode辅助NameNode进行元......
  • React hooks子组件暴露方法示例
    说明通常情况下,React 子组件使用父组件的方法或值通过props传递,反过来,父组件如果需要子组件的方法就需要子组件将自己的方法暴露出去。以下是一个实例:User.tsximportReact,{FC,useEffect,useState,useRef}from'react';import{Button,Table}from'antd';impor......
  • 【已解决】ElementPlus 的 el-menu 组件如何用 js 控制展开某个子菜单,并在其他组件中
    文章目录需求几次探索官网寻找线索(解决办法)需求我如何用代码来实现ElementPlus的菜单的展开和收缩呢?几次探索尝试通过找到节点之后,使用click事件,失败了//伪代码如下consthandleFindNodeAndClick=()=>{console.log('handleFindNodeAndClick');......