javascript - 我从 localStorage 获得的输入类型文本的值未提交
问题描述
我正在构建一个具有表单的反应应用程序。应用程序应该记住用户的输入,并在他们下次访问页面时预填充它们,并提供编辑值的选项。我为此使用本地存储,我的输入字段的一个示例是:
<div className="input-field mb-40">
<input
placeholder='First Name...'
type="text"
id='first_name'
value={ localStorage.getItem('first_name') || "" }
required
className='validate f-inpt'
onChange={this.handleChange}
/>
<label htmlFor="first_name" className="active fnt-16">
First Name
</label>
</div>
我的 onChange 方法是:
handleChange = (e) => {
localStorage.setItem([e.target.id], e.target.value)
this.setState({
[e.target.id]: e.target.value
})
}
在 Chrome 和 Edge 上,它运行良好,但在 Safari 上,值显示在表单上,但在提交表单时未提交。当我使用表单更新状态并登录到控制台时,我得到一个包含数组的对象。该数组包含这些值。
有什么我做错了吗?请帮忙!
谢谢。
解决方案
如果您使用基于类的组件,您可以使用它componentDidMount()
来检查密钥 fromlocalStorage
是否存在。如果您使用的是 react Hooks,那么您可以useEffect()
在检查值时使用和应用相同的逻辑。
但是,从您的代码来看,我假设您使用的是基于类的组件。因此,componentDidMount()
可以是解决方案。
在 内部componentDidMount()
,您可以将值分配给您的状态并在表单中调用它们。
在此处阅读文档https://reactjs.org/docs/react-component.html#componentdidmount
推荐阅读
- python - 如何从 discord.py 中的 user_id 获取成员对象
- python - Blender 中的多视图立体 3D 构建
- java - 使用编码字节数组进行 RSA 解密很好,但使用编码字符串失败 [IllegalBlockSizeException]
- javascript - 如何制作一个为 setTimeout 循环创建切换按钮的函数?
- css - 应用 Primevue 主题
- apache-spark-sql - Databricks Azure 中的结构化流式处理引发异常 - java.lang.IllegalStateException:读取增量文件 dbfs 时出错:/raw_zone/1.delta
- azure-devops - 如何在 Docker Build 步骤的 Artifacts 页面中使用 Nuget 包?
- matlab - 如何在 MATLAB 中编写一个 for 循环作为 while 循环的条件?
- xml - 更正 XPath 以根据嵌套属性获取元素
- css - VueJS路由器活动链接样式到路由器链接内的所有元素