reactjs - setState 在尝试将其保存到 LocalStorage 时记录旧值
问题描述
即使有解决这个问题的方法,我也想了解为什么我下面的当前方法不成功。我想知道为什么本地存储会记录状态的先前值,即使它与之绑定setState
?
解释:
有一个带有 onChange 功能的输入字段,用于检查用户何时键入并将其正确保存到 localStorage。
<input required type="text" className="form-control" id="hotelName" name="hotelName" onChange={this.onInputChange} />
onInputChange(event) {
localStorage.setItem('hotelCreateStep1', JSON.stringify(event.target.value));
}
情况:
因此,当它打算在将其event.target.value
写入 localStorage 之前将其写入状态对象时,如下所述,它会写入对象的先前值(仅丢失最后键入的字母或任何类型的输入尝试)。
onInputChange(event) {
this.setState({
hotelCreateStep1:{
...this.state.hotelCreateStep1,
[event.target.name]: event.target.value
}
});
localStorage.setItem('hotelCreateStep1', JSON.stringify(this.state.hotelCreateStep1));
}
解决方案
setState
在反应中是异步的。因此,无论何时调用setState
,该值都不会反映在其本身上。有关更多信息setState
及其callback
需要的信息,请参阅此处。
所以这个问题可以通过两种方式解决
- 使用
setState
回调更新localStorage
如下
onInputChange(event) {
this.setState({
hotelCreateStep1:{
...this.state.hotelCreateStep1,
[event.target.name]: event.target.value
}
}, () => {
localStorage.setItem('hotelCreateStep1', JSON.stringify(this.state.hotelCreateStep1))
});;
}
- 或者
event.target.value
直接在localStorage
onInputChange(event) {
this.setState({
hotelCreateStep1:{
...this.state.hotelCreateStep1,
[event.target.name]: event.target.value
}
});
localStorage.setItem('hotelCreateStep1', event.target.value);
}
推荐阅读
- python - 在熊猫矩阵[python]中添加和填充值为0的缺失列
- c# - 在 C# 中读取 EDF+ 文件
- android - 使用 Android Dagger Hilt 在单个流中跨片段共享数据
- regex - 删除 PostgreSQL 中的所有 Unicode 空格分隔符?
- ssh - 如何在 CentOS 8 和 putty 上设置无密码 SSH
- python - 在 AWS Lambda 上运行 Jupyter Notebook
- python - 为什么 .items() 对序列和`float`之间的乘法有效
- javascript - 使用 jQuery 进行基于属性的过滤
- javascript - 我对显示/隐藏功能有疑问
- javascript - NumberFormatter:在不同语言环境中带有减号的奇怪行为