郭震 AI公众号:郭震AI

27 与 API 交互之显示数据与错误处理

发布日期:

分类: React+tsx

预计阅读: 3 分钟

阅读次数: 0

预计阅读3 分钟
结构重点8 个
图文要点0 张
正文规模1.0k 字

在前面的章节中,我们讨论了如何处理异步请求,使用 Fetch API 获取数据。在这一篇中,我们将进一步探讨如何将从 API 获得的数据展示出来,同时处理可能出现的错误。在实际开发中,展示数据和错误处理是用户体验的重要组成部分,合理的反馈可以显著提升用户的使用体验。

一、基础准备

我们假设您已经在上一篇中完成了与 API 的异步请求部分。这里我们将继续使用 ReactTypeScript,并假设您正在从一个 RESTful API 中获取一些用户数据。

示例 API

我们将使用以下假设 API 进行演示:

  • GET https://jsonplaceholder.typicode.com/users - 获取用户列表

二、组件结构

我们将创建一个新的组件 UserList,用于展示用户信息和处理错误。以下是组件的结构:

import React, { useEffect, useState } from 'react';

interface User {
  id: number;
  name: string;
  email: string;
}

const UserList: React.FC = () => {
  const [users, setUsers] = useState<User[]>([]);
  const [loading, setLoading] = useState<boolean>(true);
  const [error, setError] = useState<string | null>(null);

  useEffect(() => {
    const fetchUsers = async () => {
      try {
        const response = await fetch('https://jsonplaceholder.typicode.com/users');
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        const data = await response.json();
        setUsers(data);
      } catch (error: any) {
        setError(error.message);
      } finally {
        setLoading(false);
      }
    };

    fetchUsers();
  }, []);

  if (loading) {
    return <div>加载中...</div>;
  }

  if (error) {
    return <div>发生错误: {error}</div>;
  }

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

export default UserList;

代码解析

  1. 状态管理

  • users 存储用户数据。
  • loading 追踪数据加载状态。
  • error 存储可能出现的错误信息。
  • 副作用

    • 使用 useEffect 进行组件挂载后的数据请求。
    • fetchUsers 异步请求用户数据,处理成功与错误的情况。
  • 展示逻辑

    • 如果 loadingtrue,显示 "加载中..."。
    • 如果出现错误,显示错误信息。
    • 如果数据成功加载,展示用户的列表。
  • 三、错误处理策略

    在我们上面的例子中,我们简单地使用了 try-catch 来捕获 API 请求中可能发生的错误。这是一个基本的错误处理方式,但在实际生产环境中,您可能需要考虑更复杂的情况,比如:

    • 网络请求失败
    • 响应数据格式不符合预期
    • API 返回的错误信息处理

    处理 HTTP 错误

    我们在上面的代码中检查了 response.ok,如果状态码不是 200-299,抛出错误。为不同状态码提供更具体的错误响应也很重要:

    if (!response.ok) {
      switch (response.status) {
        case 404:
          throw new Error('资源未找到');
        case 500:
          throw new Error('服务器错误');
        default:
          throw new Error(`请求失败: ${response.status}`);
      }
    }
    

    四、案例展示

    下面是如何在主应用中使用 UserList 组件的示例:

    import React from 'react';
    import UserList from './UserList';
    
    const App: React.FC = () => {
      return (
        <div>
          <h1>用户列表</h1>
          <UserList />
        </div>
      );
    };
    
    export default App;
    

    五、总结

    本节内容展示了如何与 API 交互并显示获取的数据,特别是如何处理错误并构建良好的用户体验。在实际开发中,这些技能是必不可少的。接下来,我们将进入项目构建与优化的部分,学习如何使用 Create React App 对我们的项目进行构建和优化。

    请保持对异步操作和状态管理机制的理解,这将在你接下来的开发中大有裨益!

    分享文章

    转发到常用平台

    微信/朋友圈可先复制链接

    相关内容

    更多相关文章

    返回栏目

    Reader Messages

    读者留言

    有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

    最多 800 字

    为了防刷,每条留言会做长度、链接数量和提交频率限制。

    0/800

    留言列表

    0
    正在加载留言...