reactjs - 即使提供了依赖项列表,也反应 useEffect 无限循环
问题描述
我刚开始学习 React Hooks,所以我在这里算是个新手。
我正在努力找出为什么下面的代码会陷入无限循环。
我找不到任何代码问题。
有没有人可以解决这个问题?
import React, { useEffect, useState } from "react";
import axios from "axios";
export interface Post {
userId: number;
id: number;
title: string;
body: string;
}
function PostFetchingOne() {
const [id, setId] = useState(1);
const [post, setPost] = useState<Partial<Post>>({});
useEffect(() => {
axios
.get(`https://jsonplaceholder.typicode.com/posts/${id}`)
.then((res) => {
setPost(res.data);
console.log("post => ", post);
})
.catch((err) => {
console.log(err);
});
}, [id, post]);
return (
<>
<div>
<input
type="text"
onChange={(e) => setId(+e.target.value)}
value={id}
/>
</div>
<div>{post.title}</div>
</>
);
}
export default PostFetchingOne;
解决方案
useEffect 的第二个参数是一个依赖数组——当它们改变时,useEffect 将再次触发。在您的 useEffect 操作中,您对 axios get 的回调执行“发布”更新。
因此,在 axios get 失败之前,您将有一个无限循环。
这里的解决方案可能是从 useEffect 的依赖数组中删除“post”。
推荐阅读
- javascript - 在 Wordpress 中从前端隐藏 Google Maps API 密钥
- java - 我该如何解决“小部件已处置”问题?
- graphql - 如何从 Apollo 解析器访问 Koa 上下文(和 koa-session)?
- r - 这个r函数%||%是什么意思?
- xamarin.forms - Xamarin.Forms。如何在地图顶部添加视图,但在定义的纬度/经度位置?
- python - 如何使用静态转发方法制作新型 autograd 函数。?
- javascript - 如何在容器中嵌入视频对象?
- javascript - Javascript/jQuery:如何使用 Javascript 或 jQuery 从另一个类获取数据值
- javascript - 绕过 e.preventDefault() onkeypress
- c# - 如何在 C# 中向 lambda 添加多个参数