React Strict Mode 执行 setState 两次破坏代码

React Strict Mode executing setState Twice breaking code

提问人:Adnan Arif Sait 提问时间:8/2/2022 更新时间:8/2/2022 访问量:390

问:

我的应用程序具有购物车功能,每次用户点击添加按钮时,商品数量都会增加。我在下面链接了代码沙盒。

https://codesandbox.io/s/multiple-state-exec-trv72o

当第一次将餐点添加到购物车时,该功能会根据需要工作。当我在同一顿饭上第二次添加点击添加时,增量增加了一倍。

Increment Amount: 3
quantity = 0;

First Add:
quantity = 3;

Second Add:
quantity = 9;

Third Add:
quantity = 15;

我知道这是由于 StrictMode 而发生的。由于 StrictMode,setState 方法被执行了两次,数量递增发生了两次。

有人可以建议一些方法在不删除 StrictMode 的情况下修复我的代码吗?

reactjs react-state 严格模式

评论


答:

1赞 kalleguld 8/2/2022 #1

使用函数参数调用 setOrderDetails 时,不应在该函数中使用 orderDetails。相反,您应该使用 prev。

您还在 orderDetail(第 28 行)中更改订单,这将导致问题。相反,您应该使用更新的数量创建一个新的订单对象。

有关示例,请参阅此处 https://codesandbox.io/s/multiple-state-exec-forked-klc81n

评论

0赞 Adnan Arif Sait 8/2/2022
谢谢@kalleguld,就像你在第二点中提到的,问题是因为我在数组中变异了一个对象。