reactjs - 为什么 React Hooks Axios API 调用会返回两次?
问题描述
为什么 React Hooks Axios API 调用会返回两次.. 即使检查它是否已加载?
我已经习惯了 this.setState ,但我试图理解为什么它在我的控制台日志中出现两次的原因。
我的代码:
import React, { useState, useEffect } from "react";
import axios from "axios";
const App = () => {
const [users, setUsers] = useState({ results: [] });
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
const fetchData = async () => {
setIsLoading(true);
await axios
.get("https://jsonplaceholder.typicode.com/users/")
.then(result => setUsers(result));
setIsLoading(false);
};
fetchData();
}, []);
console.log(
users.status === 200 && users.data.map(name => console.log(name))
);
return <h2>App</h2>;
};
export default App;
解决方案
对于火两次,可能是一次来自componentDidMount,另一次来自componentDidUpdate
https://reactjs.org/docs/hooks-effect.html
每次渲染后都会运行 useEffect 吗?是的!默认情况下,它会在第一次渲染后和每次更新后运行。(我们稍后会讨论如何自定义它。)与其考虑“安装”和“更新”,您可能会发现更容易认为效果发生在“渲染后”。React 保证 DOM 在运行效果时已经更新。
在触发 API 调用之前,您没有检查“isLoading”
// Only load when is not loading
if (!isLoading) {
fetchData();
}
推荐阅读
- c++ - 通过迭代器获取索引位置
- python - AttributeError: 'UnboundField' object has no attribute 'data' (python Flask) 我们如何解决这个问题?
- c# - 模型在一个视图中工作正常,但在另一个视图中抛出异常
- java - 与 Maven 的雪花连接,类路径上的 jar
- jquery - 如何阻止锚链接跳转到页面的另一个区域
- node.js - 我无法连接到站点套接字
- python - 奇怪的 Pynput 错误 Pynput Controller AttributeError: 'str' object has no attribute 'value'
- java - 下拉通知面板时是否可以暂停Android中的任何视频(媒体播放器)应用程序?
- spring-boot - 让 ElasticsearchRepository 返回页面中的特定字段?
- node.js - Facebook 登录并显示应用错误消息:“无法加载 URL:此 URL 的域不包含在应用的域中......”