reactjs - React 中重复的 axios 调用

标签 reactjs axios

我正在开发一个 create-react-app 生成的应用程序,并且我有一个对本地 JSON 文件的 API 调用。 不知何故,这段代码会生成 8 个 API 调用。

import '@css/request.scoped.css';
import { useState } from 'react';
import { getAllData } from '@api/api';

function Request() {
  let [user, setUser] = useState('');

  function changeUser(data) {
    setUser(data);
  }

  getAllData().then((reply) => {
    changeUser(reply.data[0].item_name);
  });

  return <>{user}</>;
}

export default Request;

这是我的 Axios 实例

import axios from "axios";

const request = axios.create({
  baseURL:'./example.json',
  timeout: 20000,
});

export const getAllData = () => {
  return request({
    method: 'get',
    url: '',
  });
};

谁能告诉我为什么会发生这种情况?

最佳答案

我怀疑最可能的原因是组件正在重新渲染,目前的逻辑是在每次渲染时进行 API 调用。

您可以将逻辑设置为仅在组件的第一次渲染时发生 with useEffect :

import { useState, useEffect } from 'react';

// then...
useEffect(() => {
    getAllData().then((reply) => {
        changeUser(reply.data[0].item_name);
    });
}, []);

传递给 useEffect 的空依赖项数组意味着它会在组件首次加载时打开一次,而不是在后续渲染时打开。您添加到该数组的任何依赖项都会导致在渲染之间依赖项发生变化时再次调用该操作。

关于reactjs - React 中重复的 axios 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68440618/

相关文章:

javascript - react 的 map 上没有点击事件

javascript - 无法访问函数内的 props

javascript - JS - http请求文件包含js变量

javascript - 如何从 axios promise 获取控制台日志

javascript - 回调不更新状态

reactjs - 如何从 Router 组件以外的组件访问路由参数

javascript - Redux 操作不会第二次被调用

javascript - 切换到 Preact 时我的 React 库中的 JSX 出错

javascript - 如何等待来自 async/await 去抖 axios 调用的数据

javascript - Then 不是 axios async/await post 请求的函数