📅  最后修改于: 2023-12-03 14:48:14.688000             🧑  作者: Mango
useEffect
是React的一个Hook
,用于处理组件的生命周期函数,在组件挂载、更新或卸载时执行副作用操作。副作用操作可能包括发送网络请求、访问本地存储、注册或注销事件监听器、或者手动触发重渲染等等。
使用useEffect
需要引入React
和useState
或其他相关的Hook
:
import React, { useState, useEffect } from 'react';
useEffect
接受两个参数,第一个参数是一个函数,用于执行副作用操作;第二个参数是一个数组,用于指定触发副作用操作的依赖项。
useEffect(() => {
// 执行副作用操作
}, [dep1, dep2, ...]);
如果没有传递第二个参数,那么useEffect
会在组件每次更新时都执行。
如果传递的是一个空数组,即[]
,那么useEffect
只会在组件首次挂载时执行,相当于componentDidMount
。
如果传递的是一个数组,那么当数组中的依赖项发生变化时,useEffect
会重新执行,相当于componentDidUpdate
。这个数组可以包含原始类型的值、状态、甚至是函数,只要它们是引用类型的,就必须通过[]
的方式传递。
对于函数组件而言,《React Hooks》中规定,useEffect
应该只执行副作用操作,不能返回任何值。
以一个计数器组件为例子,来展示useEffect
的使用:
import React, { useState, useEffect } from 'react';
function Counter() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `Count: ${count}`;
}, [count]);
function handleClick() {
setCount(count + 1);
}
return (
<div>
<button onClick={handleClick}>click me</button>
<p>Count: {count}</p>
</div>
);
}
这个计数器组件中,每次点击按钮都会增加计数器的值,同时触发useEffect
。useEffect
中的函数会将当前计数器的值设置为document.title
这个DOM元素的文本内容。useEffect
的第二个参数[count]
表示只有当计数器改变时才触发副作用操作。
useEffect
是React提供的用于处理组件生命周期函数的Hook
,用于执行组件副作用操作。它可以根据需要在不同的时机注册或移除一些业务处理逻辑。由于它是基于函数式组件实现的,所以使用起来非常方便、简洁。不过需要注意,副作用操作一定要清除干净,否则可能会造成一些潜在的问题,比如内存泄漏等。