一、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><inputtype="text"value={name}onChange={(e) => setName(e.target.value)}/></div>);
}export default DependencyChangeExample;
四、使用的好处
代码复用:useEffect
可以将副作用逻辑封装在一个函数中,提高代码的复用性。
逻辑分离:将副作用操作与组件的渲染逻辑分离,使代码更加清晰和易于维护。
函数式编程:使用 useEffect
可以在函数组件中处理副作用,避免了类组件的复杂性,使代码更符合函数式编程的思想。