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

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

时间:2024-09-24 15:52:26浏览次数:15  
标签: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

相关文章

  • 好用的js表格组件tabulator使用
    偶然中看到了这个功能强大的表格组件,不仅支持分页、过滤、排序、树形表格等常见的功能,且支持分组显示、表格内编辑、统计计算、读本地文件、拖拽表格改变行列顺序、下载、像在excel文件中操作一样的编辑等多种功能。常用配置项及表格实例化查看代码<linkhref="../plugins/tab......
  • Axure精选各类组件案例集锦:设计灵感与实战技巧
    在设计大屏页面时,设计师们面临着如何构建丰富、直观且用户友好的界面的挑战。幸运的是,Axure等强大的原型设计工具提供了丰富的可视化组件库,为设计师们提供了无限的设计灵感和实战技巧。本文将通过精选的各类组件案例,探讨大屏设计中常用组件的应用场景与设计要点。大标题:引领视觉焦......
  • Hadoop三大组件之HDFS(一)
    1.HDFS的架构HDFS(HadoopDistributedFileSystem)采用主从架构,由一个NameNode(主节点)和多个DataNode(从节点)组成。NameNode负责管理数据块映射信息(如文件名、文件目录、权限、块位置等)并配置副本策略,而DataNode负责存储实际的数据块。SecondaryNameNode辅助NameNode进行元......
  • 【已解决】ElementPlus 的 el-menu 组件如何用 js 控制展开某个子菜单,并在其他组件中
    文章目录需求几次探索官网寻找线索(解决办法)需求我如何用代码来实现ElementPlus的菜单的展开和收缩呢?几次探索尝试通过找到节点之后,使用click事件,失败了//伪代码如下consthandleFindNodeAndClick=()=>{console.log('handleFindNodeAndClick');......