教程 react tutorial

副作用与清除机制

什么是副作用?

在 React 中,副作用(Side Effects)指的是那些不会在组件渲染过程中同步完成,且会影响外部系统或产生持久影响的操作。常见副作用包括:

  • 订阅事件或数据流
  • 发送网络请求
  • 操作 DOM
  • 设置定时器或轮询
  • 手动修改浏览器标题、localStorage 等

使用 useEffect 处理副作用

useEffect 是 React 中用于处理副作用的 Hook。它在组件渲染完成后执行一次,也可以根据依赖项多次执行。

示例:设置定时器

jsx
import { useEffect } from 'react';

function Timer() {
  useEffect(() => {
    const timer = setInterval(() => {
      console.log('定时器执行');
    }, 1000);

    // 返回清理函数
    return () => {
      clearInterval(timer);
      console.log('定时器清除');
    };
  }, []); // 空数组表示只在挂载和卸载时运行
  return <p>定时器已启动,查看控制台输出</p>;
}

`

清除副作用的作用

当组件卸载或 useEffect 的依赖发生变化时,React 会自动调用 useEffect 中返回的清理函数。这种机制可以帮助我们:

  • 取消订阅,防止内存泄漏
  • 清理定时器或轮询任务
  • 撤销 DOM 操作或全局事件监听器

示例:事件监听与清除

jsx
import { useEffect } from 'react';

function ResizeListener() {
  useEffect(() => {
    const handleResize = () => {
      console.log('窗口尺寸变化');
    };
    window.addEventListener('resize', handleResize);

    return () => {
      window.removeEventListener('resize', handleResize);
    };
  }, []);

  return <p>请尝试调整窗口大小</p>;
}

总结

useEffect 中的清除机制是管理副作用生命周期的关键,它确保组件在卸载或更新时不会留下无用的资源或事件,保持应用运行的性能和正确性。