首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用useEffect()时,最大深度超过了react错误

使用useEffect()时,最大深度超过了react错误
EN

Stack Overflow用户
提问于 2020-10-18 06:51:54
回答 2查看 1.1K关注 0票数 1

错误:警告:超过最大更新深度。当组件在useEffect中调用useEffect时可能会发生这种情况,但是useEffect要么没有依赖数组,要么在每次呈现时都会更改依赖项之一。

代码语言:javascript
复制
const [products, setProducts] = useState([]);

useEffect(() => {
  setProducts(getCartProducts());
}, [products]); 

当传递一个空数组作为第二个参数时,应用程序可以正常工作,但是为了反映页面上的更改,我必须刷新它,但是在将'items‘对象作为数组中的第二个参数传递之后,我会收到上面的错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-19 06:14:45

代码语言:javascript
复制
const [products, setProducts] = useState([]);

useEffect(() => {
  setProducts(getCartProducts());
}, [products]); 

这相当于在没有任何条件的情况下在componentDidUpdate中设置状态。您正在useEffect中更新状态,这是正确的,但是在dependency array中传递相同的状态作为一个参数,该参数在您的效果中将被更新为dependency array。您应该设置,更改您的依赖注入,您应该重新评估您的代码,并相应地标记您的依赖数组。如果您将products设置为效果的依赖数组,那么您只是说,每当products,更新时,运行此效果的响应就会发生,而内部效果只是更新products,,因此没有任何意义,您可以做的一件事是使用辅助状态来运行效果。

票数 2
EN

Stack Overflow用户

发布于 2020-10-18 08:56:59

打电话给setItems (你是说setProducts,对吗?)在useEffect中,强制更新products状态,然后强制调用useEffect

通过传递[products]作为第二个参数,您可以监视在这个字段上所做的更改。products的值也发生了变化。我猜这是因为getCartProducts()产生新的引用(是非原始的,像对象或数组)。这就是为什么React认为领域发生了变化。

形成一个循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64410528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档