当前位置: 首页 > article >正文

【React】useEffect的使用场景与作用

useEffect 是 React 中的一个 Hook,用于在函数组件中执行副作用。副作用是指那些与渲染过程无关的操作,比如数据获取、订阅事件、手动操作 DOM、日志记录等。useEffect 允许你在函数组件中引入这些副作用,而不必依赖于类组件的生命周期方法(如 componentDidMountcomponentDidUpdatecomponentWillUnmount)。

useEffect 的使用场景和作用:

数据获取(Fetching Data):

1.当组件加载时,通过 API 请求获取数据。

示例:

useEffect(() => {
  fetch('https://api.example.com/data')
    .then(response => response.json())
    .then(data => setData(data));
}, []); // 空依赖数组表示只在组件挂载时执行

2.订阅和取消订阅(Subscriptions):

你可以在组件挂载时订阅某些事件,并在组件卸载时取消订阅。
示例:

useEffect(() => {
  const handleResize = () => console.log('Window resized');
  window.addEventListener('resize', handleResize);
  return () => window.removeEventListener('resize', handleResize); // 清除副作用
}, []); // 空依赖数组表示只在组件挂载和卸载时执行

3.DOM 操作:

当你需要手动操作 DOM 元素时,可以使用 useEffect。
示例:

useEffect(() => {
  document.title = `You clicked ${count} times`;
}, [count]); // 依赖于 count,每次 count 改变时执行

4.清除副作用(Cleanup Effects):

在组件卸载或副作用更新之前清除副作用,以避免内存泄漏或不必要的操作。
例如:清除定时器、取消网络请求或移除事件监听器。
示例:

useEffect(() => {
  const timer = setTimeout(() => {
    console.log('This will run after 1 second');
  }, 1000);
  return () => clearTimeout(timer); // 在组件卸载时清除定时器
}, []); // 依赖数组为空,只在组件挂载和卸载时执行

useEffect 的依赖数组:

useEffect 接受两个参数:一个副作用函数和一个可选的依赖数组。
副作用函数:在组件渲染后执行。这个函数可以返回一个清除副作用的函数。

依赖数组:定义副作用何时重新执行。只有当数组中的依赖项发生变化时,副作用函数才会执行。

空数组 []:仅在组件挂载和卸载时执行副作用。

无数组:每次组件重新渲染时都会执行副作用。

带有依赖项的数组:当依赖项发生变化时才会重新执行副作用。

useEffect(() => {
  // 这段代码在组件挂载后运行
  console.log('Component mounted');
  
  // 返回的函数将在组件卸载时运行
  return () => {
    console.log('Component unmounted');
  };
}, []); // 空依赖数组意味着只在挂载和卸载时执行

小结:

useEffect 是 React 中处理副作用的主要工具。它可以模拟组件的生命周期钩子,并提供一种灵活且强大的方式来控制函数组件中的副作用行为。


http://www.kler.cn/a/284102.html

相关文章:

  • 【JAVA基础】JVM是什么?
  • 深入探索:Scrapy深度爬取策略与实践
  • vue面试题7|[2024-11-14]
  • SQL 中 BETWEEN AND 用于字符串的理解
  • Javaweb—Ajax与jQuery请求
  • 【数据结构与算法】第12课—数据结构之归并排序
  • 什么软件可以用平板远程控制电脑?
  • 【使用 Python 进行图像裁剪的多种方法】
  • Leetcode Hot 100刷题记录 -Day5(双指针)
  • 1.7 离散频率
  • python学习-04【流程控制语句】
  • Qt 调用MFC dll,动态库中有界面
  • 数据结构——链式二叉树的实现与分治编程思维(c语言实现)
  • sql-labs靶场(41-50)
  • unity脚本
  • 理解 Maven 依赖范围及编译与运行时的需求
  • 无缝 CI/CD:如何在 Windows 环境中使用 Docker 和 Jenkins 自动化部署 .NET 应用
  • 嵌入式全栈开发学习笔记---Linux系统编程(进程控制)
  • 全球城市多边形和点数据集 (GUPPD)
  • 带你手撕面试题——定时器方案:红黑树版
  • OSINT技术情报精选·2024年8月中旬
  • 美容院拓客营销门店管理小程序渠道进行
  • 我的世界实体与生物ID表
  • 前后端传参@RequestParam使用上的一个小坑
  • 代码随想录八股训练营总结篇 2024年8月
  • 爬虫入门urllib 和 request (一)