React Native

React-useEffect

2024-01-19  本文已影响0人  YongjieBook

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 中的函数会被重新执行。

上一篇 下一篇

猜你喜欢

热点阅读