我正在try 使用AXIOS将一个测试JSON服务器连接到我的前端RESPECT.我看到网络判断中的对象,但站点上没有显示任何内容.

我想可能是 map 的问题吧?当我搬走的时候?我在控制台中看到一个错误."未捕获的类型错误:无法读取未定义的属性(正在读取‘map’)"状态代码显示为200,我看到预览和响应.我对打字和react 都是超级新手,所以我不太确定问题出在哪里.感谢您的理解!

头戴式耳机首次亮相

import axios from "axios";
export default axios.create({
  baseURL: "http://localhost:3000/",
  method: "GET",
});

使用测试

import { CanceledError } from "axios";
import { useEffect, useState } from "react";
import 头戴式耳机首次亮相 from "./api-client";

export interface Title {
  title_id: number;
  title_name: string;
  title_description: string;
}

interface FetchTitleResponse {
  count: number;
  results: Title[];
}

const 使用测试 = () => {
  const [titles, setTitles] = useState<Title[]>([]);
  const [error, setError] = useState("");

  useEffect(() => {
    const controller = new AbortController();

    头戴式耳机首次亮相
      .get<FetchTitleResponse>("/titles", { signal: controller.signal })
      .then((res) => setTitles(res.data.results))
      .catch((err) => {
        if (err instanceof CanceledError) return;
        setError(err.message);
      });
    return () => controller.abort();
  }, []);
  return { titles, error };
};

export default 使用测试;

APP

import 使用测试 from "./使用测试";

function App() {
  const { titles, error } = 使用测试();

  return (
    <div>
      {error && <div>{error}</div>}
      hi
      <ul>
        {titles?.map((title) => (
          <li key={title.title_id}>{title.title_name}</li>
        ))}
      </ul>
    </div>
  );
}

export default App;

JSON example. I'm mainly just trying to see if I can connect to a JSON file before my group mate finishes the API

objects show in network preview, and heading is reading 200

response image, Note: on the JSON I changed the name from titles to results with no luck

推荐答案

您的代码将显示并正常运行.请确保您的回复如下所示:

// where res.data =>
{
  count: number,
  results: [{
    title_id: number,
    title_name: string,
    title_description: string
  }]
}

编辑

关于以下行,

.then((res) => setTitles(res.data.results))

res.data是来自GET请求(一个对象)的完整响应有效负载.随后对results(对象数组)的访问是响应对象的命名属性.

请查看下面的示例 struct .这就是Chrome中的"响应"标签应该显示的内容.它should not是一个简单标题对象array.

示例

// GET http://localhost:3000/titles (response)
{
  "count": 2,
  "results": [
    {
      "title_id": 1,
      "title_name": "Foo",
      "title_description": "Foo..."
    },
    {
      "title_id": 2,
      "title_name": "Bar",
      "title_description": "Bar..."
    }
  ]
}

results不应该是null.看起来你已经在用可选的链接防范null了:

<ul>
  {titles?.map((title) => (
    <li key={title.title_id}>{title.title_name}</li>
  ))}
</ul>

我怀疑您的顶级results键实际上不是一个array.

Json相关问答推荐

Jolt转换问题—使用键查找匹配对象

kotlinx-serialization:如何将具有不同类型对象的JsonArray转换为同一个Class

如何在数组抖动中按值分组

如何在VegaLite中应用Times New Roman,CaliBiri字体

如何在Gatsby/Reaction中获取JSON-File子 node

在Ansible中从json中提取特定数据

从 Inno Setup 中的 JSON 文件的每个对象中读取特定字符串

jq可以在两个JSON对象列表中依次添加对象吗?

我无法将来自 API 的数据显示到 FlatList 中,但我在 console.log 中看到了它.问题是什么?

将 JSON 文件放在哪里以在 Angular 8 应用程序中加载静态 JSON 数据?

Play Framework:如何序列化/反序列化与 JSON 的枚举

.NET 对象最灵活的序列化是什么,但实现起来很简单?

IE8 原生 JSON.parse 错误导致堆栈溢出

验证和格式化 JSON 文件

如何使用 SwiftyJSON 将字符串转换为 JSON

jQuery循环.each()JSON键/值不起作用

是否可以将数据写入本地 json 文件,除了Angular 之外什么都没有?

Django:TypeError:[] 不是 JSON 可序列化的为什么?

如何使用 Gson 将 JSONArray 转换为 List?

使用 JavaScriptSerializer() 反序列化 JSON 文件