当前位置: 首页 > 知识库问答 >
问题:

反应使用效果挂钩和异步/等待自己的获取数据功能?

龙嘉玉
2023-03-14

我试图创建一个从服务器获取数据的函数,它工作了。但我不确定这是不是正确的方法?

import React, { useState, useEffect } from "react";

const Fetch = () => {
  const [data, setData] = useState(null);
  useEffect(() => {
    const fetchData = async () => {
      let res = await fetch(
        "https://api.coindesk.com/v1/bpi/currentprice.json" //example and simple data
      );
      let response = await res.json();
      setData(response.disclaimer); // parse json
      console.log(response);
    };
    fetchData();
  }, []);
  return <div>{data}</div>;
};

export default Fetch; // don't run code snippet, not working, this component must be imported in main

我不确定是调用fetchData函数的地方。我在里面做那个有用吗?对地方?而且,这个电话只会发生一次?因为我用[]?

一般来说,你会怎么做这样的事情?

共有1个答案

黄伟
2023-03-14

总的来说,你正朝着正确的方向前进。为了获取数据,您需要使用useEffect并传递[]作为第二个参数,以确保它只在初始装入时触发。

我相信您可以从对fetchjson函数进行解耦并使其更加通用中受益,例如:

const fetchJson = async (url) => {
  const response = await fetch(url);
  return response.json();
};

const Fetch = () => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetchJson("https://api.coindesk.com/v1/bpi/currentprice.json")
      .then(({ disclaimer }) => setData(disclaimer));
  }, []);

  return <div>{data}</div>;
};
 类似资料:
  • 当我的组件最初挂载时,我使用useEffect钩子异步获取数据。我还想使用一个效果(或另一个更适合这种情况的钩子)来转换这些数据,同样是在我的组件最初挂载时。 引用上下文并初始化增强节本地状态 在挂载上获取数据(此工作原理) 转换获取的数据和 这里的问题是此时仍然为空 当我把上面的内容从use效应中拉出来,放在一个基本的if语句中时,它就起作用了(无限循环仍然是一个问题)... 我知道我应该根据R

  • 问题内容: 我正在寻找一种使用Node v7.6或更高版本的方法,以在调用异步函数时获得Bluebird Promise(或任何非本机Promise)。 用同样的方式,我可以做: 请参阅: 我可以使用global.Promise = require(“ bluebird”) 我希望能够执行以下操作: 我知道我可以随时使用类似的东西: 但是我很 好奇 是否有办法更改所返回的默认Promise 。构造

  • 问题内容: 我正在尝试使用新的react useReducer API来获取一些数据,并停留在需要异步获取的阶段。我只是不知道如何:/ 如何将数据获取放置在switch语句中,或者这不是应该完成的方式? 我试图这样做,但它不能与异步一起工作;( 问题答案: 这是一个有趣的案例,示例没有涉及。我认为减速器不是异步加载的正确位置。来自Redux的心态,您通常会将数据加载到其他位置,例如以thunk,可

  • 我正在尝试做一个简单的应用程序,加载数据并对其执行一个操作.所以我的想法是做这个异步。 我有3个数据源,我想异步加载它们。例如data1.xml、data2.xml和data3.xml所有文件加载起来都相当大,所以需要一些时间(这就是为什么我想要异步的原因)。 例如,我创建了一个包含3个文本框的窗口,这些文本框都绑定到一个特定的属性(Text1、Text2、Text3)和一个按钮。当我点击按钮时,

  • 问题内容: 我写了这段代码 然后我尝试在另一个文件中使用它 我有一个错误 “等待仅在异步功能中有效” 有什么问题 问题答案: 错误不是指而是。 我利用这个问题的机会来告诉你一个已知的反模式的使用方法:。 错误 正确 另外,要知道有一个正确且重要的特殊情况:(使用try / catch)

  • 太长,读不下去了如何模拟或使用带有数组的道具强制重置我的组件? 我正在实现一个组件,它显示一个计时器,并在达到零时执行回调。目的是让回调更新对象列表。后一个组件由新的React钩子和组成。 包含对计时器启动时间和剩余时间的引用。设置每秒钟调用一次的间隔,以更新剩余的时间,并检查是否应该调用回调。 该组件并不意味着重新安排计时器,或者在间隔达到零时保持间隔,它应该执行回调并空闲。为了让计时器刷新,我