React 中的 useEffect Hook 用于处理副作用(side effects),例如:
- 网络请求:在组件挂载或更新时,需要从服务器获取数据。
- 设置 timer:在组件挂载时,需要设置一个 timer 来执行某些任务。
- 操作 DOM:在组件挂载或更新时,需要直接操作 DOM 元素。
- 订阅事件:在组件挂载时,需要订阅某些事件,例如 WebSocket 事件或浏览器事件。
- 清理资源:在组件卸载时,需要清理某些资源,例如关闭 WebSocket 连接或删除 timer。
使用 useEffect 的时机:
- 组件挂载:在组件首次挂载时,需要执行某些初始化操作。
- 组件更新:在组件的 props 或 state 发生变化时,需要重新执行某些操作。
- 组件卸载:在组件卸载时,需要清理某些资源。
useEffect 的基本语法:
import { useState, useEffect } from 'react';
function Example() {
  const [count, setCount] = useState(0);
  useEffect(() => {
    // 在组件挂载时,执行某些操作
    console.log('Mounted!');
    // 在组件卸载时,清理某些资源
    return () => {
      console.log('Unmounted!');
    };
  }, []); // 第二个参数是一个依赖项数组,空数组表示只在组件挂载时执行
  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}
在上面的示例中,我们使用 useEffect 来记录组件的挂载和卸载事件,并在组件卸载时清理某些资源。