问题:当使用 React Hooks 并使用事件监听器处理事件时,控制台中显示的状态是不正确的。具体来说,单击卡片内的按钮应该会显示更新后的状态(卡片数量),但它错误地显示了原始状态。
代码说明:
问题出现的原因是如何使用 useState 钩子在功能组件中注册事件侦听器。在提供的示例中,handleCardClick 函数是在 CardsProvider 功能组件中定义的,并且在调用时它始终引用初始状态。
另一方面,handleButtonClick 是在 Card 功能组件中定义的,并作为支柱。由于它在每次渲染时重新注册,因此它引用新鲜状态。因此,当handleCardClick显示错误的状态时,handleButtonClick显示正确的状态。
1。可变状态:
使用 useRef 代替 useState 来存储可变状态。但是,不建议将此方法用于更新状态,因为它在类和函数组件中都是反模式。
2.状态更新器函数:
在事件监听器中使用状态更新器函数来接收新鲜状态而不是陈旧状态。
3.手动事件监听器重新注册:
每次重新注册事件监听器,确保其能够访问最新状态。
4.内置事件处理:
通过将事件监听器直接传递到 DOM 事件处理程序中来使用 React 内置事件处理,例如 onClick={eventListener}。
注意:在React 16.8的最终版本中,useState仅支持不可变状态。因此,原始答案中描述的可变状态解决方案不再适用。
以上是为什么在 React Hooks 中使用事件监听器处理事件时状态不正确?的详细内容。更多信息请关注PHP中文网其他相关文章!