javascript - 了解 Suspense 和 React Hooks

标签 javascript reactjs typescript react-hooks react-suspense

我正在努力寻找使用 的问题悬疑 react 钩子(Hook) .
有几个关键问题使用下面的 React 代码。

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

const SuspensefulUserProfile = ({ userId }) => {
  const [data, setData] = useState({});
  useEffect(() => {
    fetchUserProfile(userId).then((profile) => setData(profile));
  }, [userId, setData])
  return (
    <Suspense>
      <UserProfile data={data} />
    </Suspense>
  );
};
const UserProfile = ({ data }) => {
  return (
    <>
      <h1>{data.name}</h1>
      <h2>{data.email}</h2>
    </>
  );
};
const UserProfileList = () => {
  <>
    <SuspensefulUserProfile userId={1} />
    <SuspensefulUserProfile userId={2} />
    <SuspensefulUserProfile userId={3} />
  </>
};
让我知道它们是什么。
我发现了两个关键问题。
  • 滥用setdatauseEffect依赖数组
  • 未提供 suspense fallback Prop 。

  • 我认为仍然存在一个关键问题。
    一件奇怪的事情是为什么 userId需要包含在依赖数组中。

    最佳答案

    你误用了Suspense到它的核心,至少在数据获取的悬念可用之前。
    Suspense 目前仅适用于 React.lazy组件,而不是应用程序的任意“加载”状态。例如,React 应该如何计算出你的 data正在加载?Suspense 的唯一用途是允许在 React 加载惰性组件时显示一些后备。对于其他类型的延迟加载应用程序数据,您可以实现自己的回退,如:

    const SuspensefulUserProfile = ({ userId }) => {
      const [data, setData] = useState();
    
      useEffect(() => {
        fetchUserProfile(userId).then(setData);
      }, [userId])
    
      return data ? <UserProfile data={data} /> : 'Loading...';
    };
    

    关于javascript - 了解 Suspense 和 React Hooks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64251098/

    相关文章:

    reactjs - React-navigation:使用底部选项卡导航器时不显示标题

    angular - Angular 6 中的 debounceTime 和 distinctUntilChanged

    angular - 如何在 ionic 2(搜索栏)中进行自动完成

    javascript - 不使用innerHTML 获取<p> 的值

    javascript - ajax 调用上的 GET 参数(进入模式对话框)

    javascript - 提交时 html 文本框上的 UrlDecode 值

    javascript - 从 mongodb 游标中检索每个第 x 个元素的有效方法

    reactjs - React 添加动态元素键和值

    reactjs - 从 formik 向状态传递值

    javascript - 使用 webpack 捆绑 NodeJS/TypeScript 应用程序的好处