如何在 React.Js 挂钩中使用 SQL 查询值正确填充下拉列表

How to properly Populate a Dropdown with SQL Query Values in React.Js Hook

我有一个名为 Sidebar.jsx 的 React 组件。在其中,我进行了一个 API 调用以获取一组舰队以填充我的边栏中最终的 JSX 下拉元素。这会产生一个简单的 JSON 数组。

我从我的服务文件夹中导入了一个名为 getFleets() 的函数来进行 API 调用。该服务使用 fetch API 对我的后端进行查询调用,如下所示:

export async function getFleets() {
    const resp = await fetch("http://localhost:5000/fleets", {
        method: 'GET',
        headers: {},
        mode: 'cors'
    });
    return resp.json();
};

但是,当我使用该网站时,它似乎无限地进行 API 调用。这是我第一次尝试在反应组件中进行 API 调用,所以我在这里有点困惑。我在网上阅读的其他指南似乎相似,但我显然遗漏了一些东西。

我该怎么做才能使这个 API 只调用一次并检索我的 JSON 数组,这样我以后可以用它来填充我的 return 中的选项?

Sidebar.jsx

import React, { useEffect, useState } from "react";
import { getFleets } from "../services/FleetService";

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

  useEffect(() => {

    const setFleets = async () => {
        const fleets = await getFleets();
        console.log(fleets);
        setData(fleets);
      }
    setFleets();
  }, [data]);


  return (
    <>
    // Add data to <select> </select>
  );
};

你的代码的工作方式,因为 data 是发送到 useEffect 的依赖数组的一部分,每次 data 改变效果 运行s,它改变data,这 运行 再次产生效果...导致无限循环。

简单的修复方法是从依赖数组中删除 data,并明确指定一个空数组 [] 作为 useEffect 的第二个参数。这将使效果 运行 只有一次,当组件首次呈现时。

您需要明确指定一个空数组,因为当根本不指定第二个参数时,效果将 运行 在每次渲染时出现,从而导致无限循环问题。