当前位置:首页 > React

react公用组件如何请求接口

2026-01-25 00:58:53React

公用组件请求接口的实现方法

公用组件在React中请求接口需要遵循高内聚、低耦合原则,确保组件可复用且不依赖特定业务逻辑。以下是几种常见实现方式:

react公用组件如何请求接口

使用自定义Hook封装请求逻辑

创建可复用的数据请求Hook,组件通过调用Hook获取数据:

react公用组件如何请求接口

// useApiData.js
import { useState, useEffect } from 'react';
import axios from 'axios';

function useApiData(url) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);

  useEffect(() => {
    setLoading(true);
    axios.get(url)
      .then(response => setData(response.data))
      .catch(err => setError(err))
      .finally(() => setLoading(false));
  }, [url]);

  return { data, loading, error };
}

// 组件中使用
function UserList() {
  const { data, loading, error } = useApiData('/api/users');

  if (loading) return <div>Loading...</div>;
  if (error) return <div>Error!</div>;

  return <ul>{data?.map(user => <li key={user.id}>{user.name}</li>)}</ul>;
}

通过Props注入请求方法

父组件传递API请求函数作为props,保持组件与具体请求实现解耦:

// UserList.jsx
function UserList({ fetchData }) {
  const [users, setUsers] = useState([]);

  useEffect(() => {
    fetchData().then(data => setUsers(data));
  }, [fetchData]);

  return <ul>{users.map(user => <li key={user.id}>{user.name}</li>)}</ul>;
}

// 父组件中
function ParentComponent() {
  const fetchUsers = () => axios.get('/api/users').then(res => res.data);

  return <UserList fetchData={fetchUsers} />;
}

使用Context提供API服务

通过React Context全局提供API服务,任意组件均可消费:

// ApiContext.js
const ApiContext = createContext();

function ApiProvider({ children }) {
  const get = (url) => axios.get(url).then(res => res.data);

  return (
    <ApiContext.Provider value={{ get }}>
      {children}
    </ApiContext.Provider>
  );
}

// 组件中使用
function UserList() {
  const { get } = useContext(ApiContext);
  const [users, setUsers] = useState([]);

  useEffect(() => {
    get('/api/users').then(data => setUsers(data));
  }, [get]);

  return <ul>{users.map(user => <li key={user.id}>{user.name}</li>)}</ul>;
}

注意事项

  • 错误处理应统一封装,避免每个组件重复处理
  • 考虑添加请求取消逻辑,防止组件卸载后仍更新状态
  • 对于需要参数化的请求,可通过高阶函数生成特定请求方法
  • 使用TypeScript时明确定义API响应类型,增强类型安全
// TypeScript示例
interface User {
  id: number;
  name: string;
}

function useApiData<T>(url: string) {
  const [data, setData] = useState<T | null>(null);
  // ...其余实现
}

// 使用时指定类型
const { data } = useApiData<User[]>('/api/users');

标签: 组件接口
分享给朋友:

相关文章

vue3中实现接口轮询

vue3中实现接口轮询

使用 setInterval 实现基础轮询 在 Vue 3 中,可以通过 setInterval 定时调用接口。在组件的 setup 中定义轮询逻辑,注意在组件卸载时清除定时器以避免内存泄漏。 i…

vue实现组件

vue实现组件

Vue 组件实现基础 Vue 组件是可复用的 Vue 实例,用于封装 UI 和逻辑。通过 .vue 文件或直接注册组件实现。 单文件组件 (SFC) 示例 <template&g…

vue哪个组件实现动画

vue哪个组件实现动画

在Vue中实现动画效果,可以通过以下组件和方法实现: Vue内置动画组件 Vue提供了<transition>和<transition-group>两个内置组件,用于处理进入…

vue实现倒计时组件

vue实现倒计时组件

Vue 倒计时组件实现 核心思路 通过 setInterval 或 setTimeout 实现时间递减,结合 Vue 的响应式数据更新 UI。需注意组件销毁时清除定时器。 基础实现方案 模板部分…

vue实现穿梭框树组件

vue实现穿梭框树组件

Vue 穿梭框树组件实现 穿梭框树组件通常结合了树形结构和穿梭框功能,允许用户在左右两栏之间移动树节点数据。以下是基于 Vue 的实现方案: 核心功能设计 数据结构 树形数据通常采用嵌套结构,例如…

vue调用接口实现退出

vue调用接口实现退出

Vue 调用接口实现退出功能 在 Vue 中实现退出功能通常需要调用后端接口,清除用户登录状态,并跳转到登录页面或其他指定页面。以下是实现步骤: 定义退出接口方法 在 Vue 项目中,通常会在 sr…