reactjs - 如何在reactjs中创建具有唯一名称属性的重复输入元素
问题描述
我想创建一个重复的输入元素,如下所示
<input
type="text"
className="form-control mb-3"
id="whatweoffer"
name="whatweoffer"
value={this.state.whatweoffer}
onChange={this.handleChange}
placeholder="what we offer"
required
/>;
但它应该有一个不同的名称属性,并且必须使用该值来设置状态
handleChange = e => {
this.setState({ [e.target.name]: e.target.value });
};
有人能帮我吗?
解决方案
创建一个包含输入属性的对象数组,并将其设置为状态。
this.state = {
inputs: [
{
name: 'whatweoffer_name',
value: 'whatweoffer_value',
placeholder: 'whatweoffer_placeholder'
},
{
name: 'whatweoffer_2_name',
value: 'whatweoffer_2_value',
placeholder: 'whatweoffer_2_placeholder'
}
]
}
并在中使用相同的render()
:
render() {
return(
{this.state.inputs.map(input => (
<input
type="text"
className="form-control mb-3"
id={input.name}
name={input.name}
value={input.value}
onChange={this.handleChange}
placeholder={input.placeholder}
required
/>;
))}
)
}
然后你handleChange
变成这样:
handleChange = e => {
// Fetch the name and value of the input that fired the method
const {name, value} = e.target
this.setState(prevState => {
// Take copy of the input list
let {inputs} = prevState
// Find the index of the object in the input list to be updated
const inputIndex = inputs.findIndex(input => input.name === name)
// Update the item
inputs[inputIndex].value = value
return { inputs }
});
};
推荐阅读
- javascript - setState():不要直接改变状态。使用 setState()
- bash - 如何在bash中将时间戳转换为不同的时区?
- timer - STM32定时器中断周期
- php - 如何设计一个多对多关系的模式,其中一张表用于存储已订购的项目?
- javascript - requestAnimationFrame 回调中的时间戳没有变化
- node.js - 如何更新对象中的数组并在不存在时推送
- spring - 从单元测试运行事物时@Value 解析为 null
- python - Pandas read_csv():如果不匹配模式则删除行
- excel - VBA 运行时错误 445 - Application.FileSearch
- visual-studio - Visual Studio 发布向导在可用目标列表中缺少 (Azure) 应用服务目标