React-useEffect

作者: YongjieBook | 来源:发表于2024-01-19 17:05 被阅读0次

    useEffect 是 React Hooks 中的一个函数,用于处理组件的副作用操作。副作用通常包括数据获取、订阅、手动修改 DOM 等操作,而 useEffect 允许你在函数组件中执行这些操作。

    基本用法

    useEffect 接收两个参数:一个函数和一个依赖数组。函数定义了副作用的操作,而依赖数组用于指定何时触发这个副作用。

    import React, { useEffect } from 'react';
    
    function MyComponent() {
      useEffect(() => {
        // 副作用操作
        console.log('Component is mounted');
    
        // 返回一个清理函数(可选)
        return () => {
          console.log('Component will unmount');
        };
      }, []); // 依赖数组为空时,只在组件挂载和卸载时执行
    
      return <div>My Component</div>;
    }
    

    在上述例子中,useEffect 中的函数会在组件挂载时执行一次(类似于类组件的 componentDidMount),并且由于依赖数组为空,该函数也会在组件卸载时执行(类似于类组件的 componentWillUnmount)。

    处理异步操作

    useEffect 也常用于处理异步操作,例如数据获取:

    import React, { useState, useEffect } from 'react';
    
    function DataFetchingComponent() {
      const [data, setData] = useState(null);
    
      useEffect(() => {
        const fetchData = async () => {
          try {
            const response = await fetch('https://api.example.com/data');
            const result = await response.json();
            setData(result);
          } catch (error) {
            console.error('Error fetching data:', error);
          }
        };
    
        fetchData();
      }, []); // 空的依赖数组确保该 effect 只在组件挂载时执行
    
      return (
        <div>
          {data ? (
            <ul>
              {data.map(item => (
                <li key={item.id}>{item.name}</li>
              ))}
            </ul>
          ) : (
            <p>Loading data...</p>
          )}
        </div>
      );
    }
    

    在这个例子中,useEffect 被用于发起异步数据请求,并在数据返回后更新组件的状态。

    处理依赖项变化

    如果你想在特定依赖项变化时执行副作用操作,只需将这些依赖项添加到依赖数组中:

    import React, { useEffect, useState } from 'react';
    
    function ExampleComponent({ userId }) {
      const [userData, setUserData] = useState(null);
    
      useEffect(() => {
        const fetchUserData = async () => {
          try {
            const response = await fetch(`https://api.example.com/user/${userId}`);
            const data = await response.json();
            setUserData(data);
          } catch (error) {
            console.error('Error fetching user data:', error);
          }
        };
    
        fetchUserData();
      }, [userId]); // 当 userId 变化时执行副作用
    
      return (
        <div>
          {userData ? (
            <p>User data: {userData.name}</p>
          ) : (
            <p>Loading user data...</p>
          )}
        </div>
      );
    }
    

    在上述例子中,useEffect 的依赖数组包含 userId,所以当 userId 变化时,useEffect 中的函数会被重新执行。

    相关文章

      网友评论

        本文标题:React-useEffect

        本文链接:https://www.haomeiwen.com/subject/hrljodtx.html