首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我一直收到这个错误:最大更新深度超过了。这可能发生在组件调用内部的setState时。

我一直收到这个错误:最大更新深度超过了。这可能发生在组件调用内部的setState时。
EN

Stack Overflow用户
提问于 2022-11-04 20:16:56
回答 1查看 41关注 0票数 0

每当我运行我的代码时,我都会收到这样的错误:“超过了最大更新深度。当组件在useEffect中调用useEffect时,这种情况可能发生,但是useEffect要么没有依赖项数组,要么每个呈现程序上的依赖项都会发生变化。”

我理解为什么会发生这种情况,但我不知道如何编写我的代码来实现我想做的事情。

我的代码是:

代码语言:javascript
复制
const CheckoutComponent = () => {
    const { checkoutProducts } = useSelector((state)=> state?.allCartProducts);
    const [totalPrice, setTotalPrice] = useState(0);

    const costOfItems = ()=> {
        let itemsTotalCost = 0;
        checkoutProducts?.map((product)=> {
          itemsTotalCost += product?.price * product?.quantity;
        })
        return itemsTotalCost;
    }

   useEffect(()=> {
    setTotalPrice(costOfItems());

})

  return (
    <h1>The total amount is {totalPrice}</h1>
)

}

我在整个'checkoutProducts‘数组中执行映射,因为我希望得到数组中每个对象的价格和数量属性的乘积(乘积的结果)。然后,我把所有的东西总结在一起,然后再把它还回去。以下功能就是这样实现的。

代码语言:javascript
复制
const costOfItems = ()=> {
        let itemsTotalCost = 0;
        checkoutProducts?.map((product)=> {
          itemsTotalCost += product?.price * product?.quantity;
        })
        return itemsTotalCost;
    }

之后,我在UseEffect钩子中调用这个函数,没有依赖项,因为每当组件中的任何东西发生变化时,我都希望它呈现。我还使用此函数的返回值来设置状态'totalPrice‘,以便稍后引用它。因此,下面的代码行:

代码语言:javascript
复制
   useEffect(()=> {
    setTotalPrice(costOfItems());

})

  return (
    <h1>The total amount is {totalPrice}</h1>
)

但是,无论是向UseEffect钩子添加依赖项数组,还是删除数组,还是将依赖项设置为函数“费用of”,我都会得到该错误:

代码语言:javascript
复制
// doesn't work
 useEffect(()=> {
    setTotalPrice(costOfItems());

})

// doesn't work either
 useEffect(()=> {
    setTotalPrice(costOfItems());

}, [])

// doesn't work too
 useEffect(()=> {
    setTotalPrice(costOfItems());

}, [costOfItems])

这是我陷入困境的地方,因为我不能将该函数的调用附加到jsx中任何元素的“onClick”,因为我希望该函数在组件首次挂载时或组件中的任何更改时运行。拜托,我还有别的办法可以做到吗?

EN

回答 1

Stack Overflow用户

发布于 2022-11-04 20:55:22

问题

您忘记使用依赖数组了。

现在,使用setTotalPrice触发这个导致无限循环的useEffect

解决方案

添加依赖项数组

代码语言:javascript
复制
useEffect(()=> {
  setTotalPrice(costOfItems());
}, [costOfItems])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74322526

复制
相关文章

相似问题

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