You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从Fake API加载数据,请求协助遍历嵌套键值对数据

解决Fake API数据加载报错与嵌套数据遍历问题

一、修复数据加载报错

先排查并修复数据加载问题,核心是给请求加上完整的错误处理,同时确保组件渲染时的状态判断逻辑正确:

import { useState, useEffect } from "react";

function Users() {
  const [users, setUsers] = useState([]);
  const [error, setError] = useState(null);

  useEffect(() => {
    const fetchUsers = async () => {
      try {
        const response = await fetch("https://fakestoreapi.com/users");
        // 校验HTTP响应状态
        if (!response.ok) {
          throw new Error(`请求失败: ${response.status}`);
        }
        const data = await response.json();
        setUsers(data);
      } catch (err) {
        setError(err.message);
      }
    };

    fetchUsers();
  }, []);

  // 渲染错误提示
  if (error) {
    return <div>加载失败: {error}</div>;
  }

  // 加载中状态
  if (users.length === 0) {
    return <div>加载中...</div>;
  }

  // 渲染用户列表
  return (
    <div className="users-container">
      <h2>用户列表</h2>
      {users.map(user => (
        <div key={user.id} className="user-card">
          <h3>{user.name.firstname} {user.name.lastname}</h3>
          <p>邮箱: {user.email}</p>
          <p>电话: {user.phone}</p>
          {/* 处理嵌套的地址数据 */}
          <div className="user-address">
            <h4>地址信息</h4>
            <p>街道: {user.address.street}</p>
            <p>城市: {user.address.city}</p>
            <p>邮编: {user.address.zipcode}</p>
            {/* 处理更深层的坐标数据 */}
            <p>坐标: 纬度 {user.address.geo.lat}, 经度 {user.address.geo.lng}</p>
          </div>
        </div>
      ))}
    </div>
  );
}

export default Users;

二、嵌套键值对的通用遍历方法

如果需要处理未知结构的嵌套数据,可以写一个递归组件来遍历所有键值对:

function NestedDataViewer({ data }) {
  return (
    <ul>
      {Object.entries(data).map(([key, value]) => (
        <li key={key}>
          <span>{key}: </span>
          {typeof value === 'object' && value !== null ? (
            <NestedDataViewer data={value} />
          ) : (
            <span>{value}</span>
          )}
        </li>
      ))}
    </ul>
  );
}

使用时直接传入嵌套数据即可:

// 在用户卡片中调用,展示完整地址嵌套数据
<NestedDataViewer data={user.address} />

内容的提问来源于stack exchange,提问作者WebDeveloper1213

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:20:17