javascript - 创建 React App + Contentful 无限请求循环
问题描述
我开始遵循以下教程: https ://blog.logrocket.com/using-a-headless-cms-with-react/
不幸的是,一旦我完成它,我注意到Network
在我导航到其中一个子项目后,我的 chrome 选项卡开始变得疯狂:
这是简化的代码版本:https ://codesandbox.io/s/react-contentful-hx0de?from-embed
我认为它一定是在这个片段中从 Contentful 调用它的方式,它使用一个 Promise 来获得结果:
export default function useSinglePost(slug) {
const promise = getSinglePost(slug);
const [post, setPost] = useState(null);
const [isLoading, setLoading] = useState(true);
useEffect(() => {
promise.then(result => {
setPost(result[0].fields);
setLoading(false);
});
}, [promise]);
return [post, isLoading];
}
但我不知道为什么我会得到这个无限循环的网络请求。
解决方案
试试这样的,
export default function useSinglePost(slug) {
const [post, setPost] = useState(null);
const [isLoading, setLoading] = useState(true);
useEffect(() => {
getSinglePost(slug)
.then(result => {
setPost(result[0].fields);
setLoading(false);
});
}, [slug]);
return [post, isLoading];
}
你const promise = getSinglePost(slug);
没有任何备忘录或其他东西。因此,在useEffect
promise 解决时,您执行状态更改。导致重新渲染。并且在那些重新渲染承诺会重新定义更改promise
. 再次导致useEffect
运行。这再次导致状态变化和重新渲染,这是你的无限循环
推荐阅读
- pytorch - 尝试使用 PyTorch 构建 CNN 模型时出现错误“_init__() 采用 1 个位置参数,但给出了 2 个”
- reactjs - 我无法在 Semantic UI React 中编辑输入值。我使用了 onChange 但它不起作用。所有其他功能都运行良好
- go - 如何使用“archive/zip”包在 Golang 中压缩符号链接?
- kubernetes - 从初始化容器加载机密作为 ENV
- javascript - 隐藏值角
- flutter - 'bool?' 类型的值 不能分配给“bool”类型的变量,因为“bool?” 可以为空,并且 'bool' 不是
- swift - DispatchQueue.main 的 receive(on:) 行为
- .net - Entity Framework Core:连接到 Oracle 数据库
- html - 只有边界行和外部表引导
- macros - SPSS/macro:将字符串拆分为多个变量