javascript - 更新复选框中的状态延迟,React
问题描述
我必须对象sizes
,newProduct
我需要使用复选框设置可用大小,它工作正常但是:
当我选中两个框时,状态仅在第一个框中更新,然后当将sizes
对象推送到newProduct
对象时,newProduct
直到我选中第三个框后状态才更新(仅更新第一个框的值)
这是我的代码:
function Products(){
const [sizes, setSizes] = useState({
s: false, m: false, l: false, xl: false, xxl: false, xxxl: false
})
const [newProduct, setNewProduct] = useState({
productType : "", name : "", price : "", photo : "", sizes : sizes
})
const manageSizes = (e) => {
const { name, checked} = e.target
setSizes({...sizes, [name] : checked}) // late (1)
setNewProduct({...newProduct, sizes : sizes}) // late (2)
}
return (
{Object.keys(sizes).map((item, index) => (
<label key={index} htmlFor={item}>{item}
<input
type="checkbox"
checked={sizes[item]}
name={item}
onChange={manageSizes}
/>
</label>
))}
)
}
解决方案
您需要在设置新产品时使用新对象。
const manageSizes = (e) => {
const { name, checked} = e.target
setSizes({...sizes, [name] : checked})
setNewProduct({...newProduct, sizes : {...sizes, [name] : checked}}) // <--- new object.
}
或将其设置为新变量
const manageSizes = (e) => {
const { name, checked} = e.target
const newSizes = {...sizes, [name]: checked }
setSizes(newSizes)
setNewProduct({...newProduct, sizes : newSizes }) // <--- new object.
}
推荐阅读
- javascript - 无法启动 docker 映像 - “找不到模块 json-server”
- c# - 如何在 C# 中的 Linq Aggregate 中添加条件?
- r - 删除具有相等和连续值的行
- django - 从新的 relic Django 项目中删除 4xx 处理的错误
- android - 如何正确创建 NotificationManager 策略?
- c - g_source_set_callback : 无效的回调数据指针
- javascript - 移动到其他页面时在滚动时遇到 $(window) 问题
- c++11 - 如何使用模板从 ASCII 数组中提取不同的数据类型数据
- python - read_csv 日期包含一个点作为小数分隔符并以逗号作为小数分隔符浮动?
- angularjs - 如何打开下载的 PDF frpm FileSaver.js?