【问题标题】:Pass props to axios hook that implements react suspense将 props 传递给实现 react suspense 的 axios hook
【发布时间】:2020-12-04 18:59:21
【问题描述】:

我一直在尝试创建一个挂钩来获取数据并利用react suspense。 使用页面中的示例(和this article),我创建了一个获取数据的函数(我想将其转换为挂钩)。

示例

Here on codesandbox

问题

目前我无法通过函数传递数据,因为它在被调用时被执行。我想在useWrap(**HERE**) 中传递数据并在fetchData() 中使用它

预期行为/目标

  1. 我想将数据传递给 useWrap() 并放入 fetchData()
  2. 我希望 useWrap 成为 Hook,以便利用基本的钩子
  3. 我想利用 React Suspense

有人知道如何满足这些需求并告诉我我做错了什么吗?

谢谢!

【问题讨论】:

    标签: javascript reactjs axios react-hooks react-suspense


    【解决方案1】:

    这应该对你有用,并且比你原来的更类似于反应。

    Api.js

    import React, { useEffect, useState } from "react";
    
    export default function useWrap(id) {
      const [apiData, setApiData] = useState({});
      const [error, setError] = useState(null);
    
      useEffect(() => {
        (async () => {
          await fetch(`https://jsonplaceholder.typicode.com/users/${id}`)
            .then(async (res) => await res.json())
            .then((result) => setApiData(result))
            .catch((err) => setError(err));
        })();
      }, [id]);
    
      return error ? error : apiData;
    }
    

    ProfileDetail.js

    import React from "react";
    import useWrap from "./Api";
    
    export default function ProfileDetails() {
      const user = useWrap(1);
    
      if (user === null) {
        return;
      }
    
      return <div>{user.id}</div>;
    }
    

    【讨论】:

    • 嗨!谢谢你的回答,但它不像我那样工作,因为它没有触发悬念我在你的例子中添加了一些日志,让你看到悬念没有被触发here in sandboxSuspense 没有触发,如Api.js 没有像 React 文档示例中所述的那样抛出一个承诺
    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 2021-08-30
    • 2023-03-08
    • 2021-03-17
    • 2021-09-17
    • 1970-01-01
    • 2019-11-15
    • 2017-11-17
    相关资源
    最近更新 更多