reactjs - React JS 中的状态更新无法正常工作
问题描述
我的反应状态似乎落后了一步。在回答了类似问题之后,似乎解决方案是一个 useEffect 钩子。我已经尝试过但没有想出一种方法来实现 useEffect 来解决我的问题。当我控制台记录它时,我需要值来显示它的当前状态。请帮忙
const [productId,setProductId] = useState("")
const [quantity, setQuantity] = useState(1)
const [itemName,setItemName] = useState("")
const [values, setValues] = useState({})
<Input name={item.title} id={item.id} type="number"
onChange={(e)=>{setQuantity(e.target.value)
setItemName(e.target.name)}} />
<Button color="info" size="sm"
onClick={ ()=>{
setSelectedItems(prevItems=>{
return [...prevItems, {name:itemName,quantity:quantity}] })
setValues(prevState=>{ return {...prevState, items: selectedItems } })
}}> Add </Button>
<Button
color="info"
onClick={()=>console.log(values)}
disabled={!isLoading}
>Click me
</Button>
链接到重现问题的沙盒: https ://codesandbox.io/s/sharp-panini-8oc4g?file=/src/App.js
选择项目并单击底部的“单击我”后,值中的项目数组比 UI 上显示的所选项目落后一步。在下图中,我清楚地添加了 3 个项目,但单击“单击我”在项目数组中仅显示两个。
解决方案
推荐阅读
- regex - 根据介词强制正则表达式忽略检测
- android - Headed 如何向/从音频网关发送/接收数据
- ruby-on-rails - 如何在没有 database.yml 的情况下启动 Rails 服务器并稍后在初始化程序中添加 DB?
- javascript - 在复选框列表中,使第二个“隐藏”复选框具有与第一个相同的选中/取消选中状态并切换真/假状态
- node.js - 如何使用 EC2 (linux) 服务器启动运行 nginx 和 Node.js
- java - 在 JavaFX 中将 TableView 与实体类一起使用
- c# - 如何实现检查对象状态变化的 NUnit 测试?
- c# - 范围报告:无法在其他机器上看到屏幕截图(C#-NUnit)
- amazon-web-services - 物联网 - 来自设备的实时视频流
- javascript - 从不同的方式读取数组给了我不同的结果