reactjs 首次点击时React状态值未发生变化

8xiog9wr  于 2022-11-29  发布在  React
关注(0)|答案(1)|浏览(196)

我遇到了一个我无法解决的问题。每当我尝试添加优惠券时,它都会从数据库中成功返回百分比,但由于我创建了一个状态,它保存了我默认分配的初始百分比0。每当我单击按钮时,它都会返回值,但第二次单击按钮后会出现预期的输出。这意味着,状态保持初始值。2以后的值也是一样。3每当我给予另一个值并点击按钮时,状态保持先前的值,我必须第二次点击按钮来分配新值。
第一个
输出量:
您的位置:首页〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉〉
我已经尝试使用多个解决方案。我的预期输出如下所示:
1228.39 Checkout.js:85 1719.746 Checkout.js:85
每当我点击按钮时,它会将状态值更改为从服务器返回的数据,并完成其余的工作。

kg7wmglp

kg7wmglp1#

因此,折扣金额将从神秘函数计算,然后从我认为是破坏的状态值percentage计算。您可能遇到的问题是,percentage不会在响应回调形成的闭包中立即更新。事实上,该值在组件重新呈现之前不会更改。percentage from state的值将是用于呈现组件的值,并且将保持该值,直到回调函数结束,这个组件会重新呈现,并且会创建一个带有新闭包值的回调函数。有一个很棒的博客,它改变了我对钩子和函数组件的看法。如果你想了解更多,请阅读Dan Abramov的博客:https://overreacted.io/a-complete-guide-to-useeffect/在解释这里发生的事情方面绝对是完美的。
要解决您的问题,请使用响应对象中的百分比来执行计算,而不是闭包中的百分比,因为闭包中的百分比假定getOrderTotal()不依赖于状态中已更改的任何内容。

const discountAmount = getOrderTotal() * response.data[0].percentage;

或者,将discountAmount看作声明性值,让它成为上述计算的结果,但将它放在组件的主体中而不是回调中,并让re-render驱动结果。

相关问题