返回

React useEffect:彻底解析

前端

React的 useEffect 是一个用于管理副作用的钩子。它允许你在函数组件中执行副作用,如对DOM进行更改、发起网络请求或设置定时器。

useEffect有三个参数:

  • effectCallback: 一个函数,包含你想要在组件挂载后执行的副作用逻辑。
  • inputArray: 一个数组,包含 useEffect 应该监视的状态变量或属性。当任何一个值改变时,useEffect 将被再次调用。
  • dependenciesArray: 一个可选的数组,包含useEffect不应该监视的状态变量或属性。当这些值改变时,useEffect 不会被再次调用。

何时使用useEffect?

你应该在以下情况下使用useEffect:

  • 当你需要对DOM进行更改。
  • 当你需要发起网络请求。
  • 当你需要设置定时器。
  • 当你需要在组件卸载时清理一些资源。

useEffect的一些常见示例

以下是一些 useEffect 的常见示例:

  • 在组件挂载后设置一个定时器:
import { useEffect } from "react";

function App() {
  useEffect(() => {
    const timer = setTimeout(() => {
      console.log("Hello world!");
    }, 1000);

    // 在组件卸载时清理定时器
    return () => {
      clearTimeout(timer);
    };
  }, []);

  return (
    <div>
      <h1>Hello world!</h1>
    </div>
  );
}

export default App;
  • 在组件挂载后发起一个网络请求:
import { useEffect, useState } from "react";

function App() {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch("https://example.com/api/data")
      .then((res) => res.json())
      .then((data) => {
        setData(data);
      });
  }, []);

  return (
    <div>
      <h1>{data}</h1>
    </div>
  );
}

export default App;
  • 在组件卸载时清理一些资源:
import { useEffect } from "react";

function App() {
  useEffect(() => {
    // 创建一个资源
    const resource = new Resource();

    // 在组件卸载时释放资源
    return () => {
      resource.release();
    };
  }, []);

  return (
    <div>
      <h1>Hello world!</h1>
    </div>
  );
}

export default App;

总结

React useEffect 钩子是React Hooks中最强大的工具之一。它可以让你在函数组件中执行副作用。本文介绍了 useEffect 的语法、参数、何时使用以及一些常见示例。