- Objective: - Breadcrumb: # 概念阐释 ## 语义 在React的上下文中,组件的主要作用是根据给定的[[React props|props]]和[[React Hooks useState|state]]state渲染UI。但在实际应用中,组件常常需要执行一些额外的任务,这些额外的任务被称为“**副作用**”: - fetch data from a back-end service. API 调用:从后端服务获取数据。 - subscribe to a stream of data. 订阅数据流。 - manage timers and intervals. 管理计时器和间隔。 - read from and make changes to the DOM. 读取 DOM 并对其进行更改,例如事件监听器 ## 语法 ```jsx useEffect(()=>{...}); ``` # 实例 ## Component Effect ```jsx import React, { useState , useEffect } from 'react'; export default function Counter() { const [count, setCount] = useState(0); useEffect(()=>{alert(`Count: ${count}`)}); const handleClick = () => { setCount((prevCount) => prevCount + 1); }; return ( <div> <p>You clicked {count} times</p> <button onClick={handleClick}> Click me </button> </div> ); } ``` ![](https://image.harryrou.wiki/2024-01-03-CleanShot%202024-01-03%20at%2008.37.50%402x.png) 在页面上点击`Click me`后,弹出 alert 信息,与[[React Hooks useState 更新对象]]中的 alert 的区别: - `useEffect` 是基于组件的渲染周期和状态/props的变化来触发的,用于处理副作用。 - 事件处理函数(如 `handleSubmit`)是基于用户交互(如点击、输入)来触发的,用于直接响应这些交互。 - 在`handleSubmit` 示例中,当表单提交时,它阻止了默认的表单提交行为,然后显示了一个包含 `profile` 数据的警告框。这是一个典型的事件响应操作,而不是一个副作用。另一方面,`useEffect` 用于处理与渲染周期相关的副作用操作,如在组件加载后获取数据或在状态变化后执行某些操作。 # 相关内容 # 参考资料 - [useEffect-React](https://react.dev/reference/react/useEffect)