代码之家  ›  专栏  ›  技术社区  ›  Skorejen

如何在TypeScript React中先获取数据,然后显示数据

  •  0
  • Skorejen  · 技术社区  · 3 年前

    因此,我试图简单地从一个笑话API中提取数据,然后以纯文本的形式将其显示在页面上。 我遇到的问题是,有时数据(笑话)显示得很好,有时我得到了数据,但DOM没有改变,结果是“什么都没有”。

    我似乎错过了传播React元素的一些东西,但我就是看不出我错过了什么。

    有人能帮我解决这个问题吗?

    这是我的代码:

    import React, { useState } from "react";
    import { Joke } from "../App";
    import Button from "./Button";
    
    const JokeContainer = () => {
      interface Joke {
        category: string;
        type: string;
        setup: string;
        delivery?: string;
        joke?: string;
      }
    
      async function fetchJoke() {
        const response = await fetch("https://v2.jokeapi.dev/joke/Programming");
        const json = await response.json();
        setJoke(json);
      }
    
      const [joke, setJoke] = useState<null | Joke>();
    
      return (
        <>
          <p>{joke?.setup ?? "nothing"}</p>
          <p>{joke?.delivery}</p>
          <Button onClick={fetchJoke} color="danger">
            My Button
          </Button>
        </>
      );
    };
    
    export default JokeContainer;
    

    谢谢你的帮助!:)

    1 回复  |  直到 3 年前
        1
  •  4
  •   Pavel Savva    3 年前

    有时此API返回 twopart 有的笑话 setup delivery 字段,有时它会返回类型的笑话 single 只有 joke 领域因为类型的笑话 仅有一个的 有未定义的 设置 传送 您看到的字段 nothing . API reference .

    你可以改变 <p>{joke?.setup ?? "nothing"}</p> <p>{(joke?.setup || joke?.joke) ?? "nothing"}</p> 显示 仅有一个的 笑话。

    您也只能请求 两部分 通过添加 type=twopart API请求的参数。 API reference .

    此API还将客户端限制为每分钟120个请求,因此您可能需要添加 try-catch 围绕您的块 fetch 以防发生这种情况。 API reference .