javascript - 无法理解传递函数以更新状态挂钩的工作原理
问题描述
在以下代码中:
// create state count
const [count,setCount] = useState(0)
//update state
setCount(count-1)
setCount(count-1)
count 的值只减一,因为 setCount() 是一个异步函数。我明白这一点。但是为什么下面的代码可以正常工作,即当传递一个函数而不是一个语句时,计数减少了 2?
setCount(prevCount => prevCount-1)
setCount(prevCOunt => prevCount-1)
为什么这里没有出现与第一种情况相同的行为?我对异步函数的经验有限,并且是新手。谢谢阅读!
解决方案
count 的值只减一,因为 setCount() 是一个异步函数
不。即使有两次调用,它也会减少 1,setCount
因为您传递count - 1
给两个函数调用。在这两个调用中,您传递的是相同的值。
第一次调用后count
不更新的原因是因为状态在组件的特定渲染中是恒定的。组件在重新渲染之前无法看到更新的状态。setCount
如果 的值为count
5,则如下
setCount(count-1)
setCount(count-1)
就好像
setCount(5 - 1)
setCount(5 - 1)
为什么这里没有出现与第一种情况相同的行为?
那是因为当您将函数传递给 时setCount
,prevCount
是 的最新值count
。在这种情况下,您不会从 的相同值中减去 1 count
。
如果 的值为count
5,则如下
setCount(prevCount => prevCount-1)
setCount(prevCount => prevCount-1)
就好像
setCount(5 => 5 - 1)
setCount(4 => 4 - 1)
推荐阅读
- eclipse - 黄瓜异常创建目录失败
- python - Matplotlib 时分直方图
- c# - 单击动态创建的按钮时无法进入事件
- segment - 具有圆形交点的扫描线算法
- json - 如何将数据从 CosmosDB 中的文档传输到 Azure SQL 数据库?
- javascript - 时间保存到数据库中为 00:00:00
- c# - 如何在调试期间查看 lambda 源代码
- python - billiard.pool 地图功能挂起
- excel - 将二维数组作为 VBA 中的子参数传递
- python - How can I add a "dynamic" AREA attribute to a polyline using ezdxf?