reactjs - 如何动态设置名称?
问题描述
我正在尝试验证每个输入字段。假设我有 5 个输入字段,如何为每个输入字段设置“错误”状态。例如 this.setState({error['roleShortName'] : true }),这不起作用,在输入中,invalid={this.state.error["roleShortName"]}。
<FormGroup row>
<Label for="roleshortname" sm={4}>roleshortname</Label>
<Col sm={8}>
<Input invalid={this.state.error}
autoComplete='off'
onChange={this.handleChange}
type="text"
value={this.state.roleShortName}
name="roleShortName"
/>
</Col>
</FormGroup>
<FormGroup row>
<Label for="rolefullname" sm={4}>rolefullname</Label>
<Col sm={8}>
<Input invalid={this.state.error}
autoComplete='off'
onChange={this.handleChange}
type="text"
value={this.state.roleName}
name="roleName"
</Col>
</FormGroup>
<Button onClick={() => this.handleAddConfirm()}
handleAddConfirm() {
if (!this.state.roleShortName) {
this.setState({ error: true })
return
}
else if (!this.state.roleName) {
this.setState({error: true})
return
}
解决方案
this.setState({error['roleShortName']: true})
不会工作。如果您希望密钥是动态的,它应该如下所示:
this.setState({[error['roleShortName']]: true})
注意[]
周围的键名。
编辑:我认为您正在寻找一个字典来保存每个输入的错误:
handleAddConfirm() {
var newErrors = {...this.state.errors}
if (!this.state.roleShortName) {
newErrors["roleShortName"] = true
}
else if (!this.state.roleName) {
newErrors["roleName"] = true
}
this.setState({ errors: newErrors })
return
}
在你的构造函数中,你应该有
this.state = {errors: {}}
推荐阅读
- javascript - Next.JS“比上一次渲染时渲染了更多的钩子”
- jmeter - 在分布式设置中安装 JMeter 插件
- python - 使用 minimax 优化国际象棋引擎
- neo4j - 具有索引约束的节点上的 Neo4j 合并查询需要 4-6 秒
- ansible - 从 ansible 中的 with_sequence 检索索引值
- iis - 迁移到 IIS 8.5 后重写不再工作
- javascript - 通过 useEffect 每秒使用 setInterval 调用函数
- regex - 正则表达式在最后两次出现的冒号之间提取一个单词
- sorting - fhir 排序和搜索参数
- c# - 当我从控制台应用程序打开它时,为什么我的 Windows 窗体布局会发生变化?