在 React.js 中获取 api 的 useEffect 钩子中的问题

时间:2021-01-29 18:14:51

标签: reactjs react-hooks fetch-api setstate use-effect

这是 react 项目中的 bootcamp.js 文件

import React, { Component, useState, useEffect } from 'react';

const Bootcamps = () => {
  const [error, setError] = useState(null);
  const [isLoaded, setIsLoaded] = useState(false);
  const [bootcamps, setBootcamps] = useState();

  const loadData = async () => {
    const response = await fetch('http://localhost:5000/api/v1/bootcamps');
    const data = await response.json();

    setIsLoaded(true);
    setBootcamps(data);
    console.log(data);      // showing data
    console.log(bootcamps); // showing undefined
  };

  useEffect(() => {
    loadData();
  }, []);

........
......
...

console.log(bootcamps) 显示未定义。请帮忙

2 个答案:

答案 0 :(得分:1)

setBootcamps 是异步的,所以你不能在调用 setter 函数后立即看到结果。

您可以添加另一个 useEffect 并将训练营状态作为依赖项。因此,当训练营发生变化时(在设置状态之后),您需要做一些事情。

  useEffect(() => {
    console.log({ bootcamps });
  }, [bootcamps]);

答案 1 :(得分:1)

如果你愿意,你可以这样尝试;

const loadData = async () => {
    const response = await fetch('http://localhost:5000/api/v1/bootcamps');
    const data = await response.json();

    setIsLoaded(true);
    setBootcamps(data);
  };



useEffect(() => {
    loadData();
   console.log(bootcamps)
  }, [bootcamps]);

因为你的依赖缺失,我不知道你的数据类型,但如果你想尝试,你的数据可能是一个对象;

const [bootcamps, setBootcamps] = useState({});