使用 react ( useeffect ) 获取 json api

Jit*_*Aji 0 javascript reactjs react-hooks

你好,

这是我第一次使用 React。我想以 json 格式获取一些数据并将其列在我的页面中。下面的代码不起作用。

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

function DataFetching() {
  const [users, setUsers] = useState({ hits: [] });
  //const [query, setQuery] = useState("redux");

  useEffect(async () => {
    const fetchData = async () => {
      const result = await axios("url");
      setUsers(result.data);
    };
  }, []);

  return (
    <div>
      <p>Hellooooo</p>
      <ul>
        {users.hits.map((user) => (
          <li key={user.id}>{user.title}</li>
        ))}
      </ul>
    </div>
  );
}

export default DataFetching;
Run Code Online (Sandbox Code Playgroud)

Dre*_*ese 6

问题

  1. useEffect钩子回调是 100% 同步的,它们根本不能是异步的(即声明的async)。这也隐式地返回一个 Promise 并与效果清理功能混淆。
  2. 您的代码从不调用该fetchData函数,因此没有真正更新。
  3. 您踩踏状态形状并将结果数组放置在根状态级别而不是hits键下的对象中。

解决方案

  1. async从效果回调中删除关键字。
  2. fetchData在效果回调体中调用。
  3. 正确更新状态。

代码:

useEffect(() => {
  const fetchData = async () => {
    try {
      const result = await axios("url");
      setUsers({ hits: result.data });
    } catch(error) {
      // handle any GET request or response handling errors
    }
  };
  fetchData();
}, []);
Run Code Online (Sandbox Code Playgroud)

编辑无价露水qbhtu

在此处输入图片说明

  • @AKX不太确定你想表达什么观点,我没有说“useEffect”回调*不能*做异步事情,而是回调本身不能是异步的。我确实进行了更新,明确指出在问题中使用“async”关键字,尽管我认为在解决方案的上下文中它已经足够清楚了。感谢您的意见。 (2认同)