React之userEffect的使用

一、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>
      <input
        type="text"
        value={name}
        onChange={(e) => setName(e.target.value)}
      />
    </div>
  );
}

export default DependencyChangeExample;

四、使用的好处

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

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

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

相关推荐
sunbyte几秒前
Three.js + React 实战系列 - 职业经历区实现解析 Experience 组件✨(互动动作 + 3D 角色 + 点击切换动画)
javascript·react.js·3d
2401_831943327 分钟前
Element Plus对话框(ElDialog)全面指南:打造灵活弹窗交互
前端·vue.js·交互
strongwyy14 分钟前
DA14585墨水屏学习(2)
前端·javascript·学习
好青崧28 分钟前
冒泡排序的原理
前端
椒盐螺丝钉37 分钟前
CSS 基础知识分享:从入门到注意事项
前端·css
球球和皮皮43 分钟前
Babylon.js学习之路《一、初识 Babylon.js:什么是 3D 开发与 WebGL 的完美结合?》
javascript·3d·前端框架·ar·vr
冬阳春晖1 小时前
web animation API 锋利的css动画控制器 (更新中)
前端·javascript·css
Python私教2 小时前
使用FastAPI和React以及MongoDB构建全栈Web应用05 FastAPI快速入门
前端·react.js·fastapi
浪裡遊2 小时前
Typescript中的对象类型
开发语言·前端·javascript·vue.js·typescript·ecmascript
杨-羊羊羊2 小时前
什么是深拷贝什么是浅拷贝,两者区别
开发语言·前端·javascript