使用 Suspense 处理请求状态

React Suspense 是 React 16.6 引入的一个特性,它允许组件在渲染之前"等待"某些条件满足,并且能够指定一个加载状态(如旋转的加载指示器),在这个条件满足之前展示给用户。这项特性最初设计用来处理组件的懒加载和代码分割,但随着 React 18 版本的发布,其用途被扩展到数据获取的场景。

Suspense 的作用:

  1. 代码分割: 允许组件的动态导入,实现代码分割,减少初始加载时间。
  2. 数据获取: 和新的 Concurrent 特性一起使用,Suspense 能够在数据获取时显示回退(fallback)内容,等数据加载完成后再渲染组件。
  3. 资源预加载: 可以配合 React.lazy 使用,提前加载组件资源。

使用示例

在React中创建一个自定义的接口请求方法,可以使用Suspense来处理数据加载的状态,你可以创建一个能够抛出promise并将数据缓存起来的函数。以下是一个简单的示例:

代码示例:

tsx 复制代码
import { Suspense } from "react";

const promise = new Promise<string>((resolve) => {
  setTimeout(() => {
    resolve("data");
  }, 2000);
});

const createResource = (promise: Promise<string>) => {
  let status = "loading";
  let data: string;

  const result = promise.then(
    (res) => {
      data = res;
      status = "success";
    },
    (err) => {
      console.error(err);
      status = "error";
    }
  );

  return {
    read: () => {
      if (status === "loading") {
        throw result;
      } else if (status === "error") {
        throw data;
      } else if (status === "success") {
        return data;
      }
    },
  };
};

const resource = createResource(promise);

const Welcome = () => {
  console.log("Welcome");

  const data = resource.read();

  console.log("data", data);

  return <div>welcome: {data}</div>;
};

const Page = () => {
  console.log("Page");

  return (
    <Suspense fallback={<div>loading...</div>}>
      <Welcome />
    </Suspense>
  );
};

export default Page;
相关推荐
777VG4 小时前
PostgreSQL +martin将多张表输出成一个 MVT
前端·数据库·postgresql
mayaairi4 小时前
JS循环语句深度解析:嵌套for、while与do...while
开发语言·前端·javascript
To_OC4 小时前
啃完流式输出:从一个卡顿的 LLM 接口开始,我搞懂了数据流到底怎么 “流”
前端·javascript·llm
阳光是sunny5 小时前
LangGraph实战教程:defer延迟节点——让收尾工作自动排到最后
前端·人工智能·后端
kyriewen5 小时前
我用了三周Claude Code Skills——总结出5条铁律,第3条最反直觉
前端·ai编程·claude
阳光是sunny5 小时前
LangGraph实战教程:控制流详解
前端·人工智能·后端
格尔曼Noah6 小时前
Safari浏览器中如何只允许指定网站下载
前端·safari
用户059540174467 小时前
用了3年Redis,才发现我一直没搞懂缓存一致性测试
前端·css
swipe7 小时前
07|(前端转后全栈)为什么后端也要缓存?从前端缓存思维理解 Redis
前端·后端·全栈
IT小盘7 小时前
05-企业项目统一接入多个大模型-适配器模式实战
前端·人工智能·适配器模式