我有一个包含三个输入元素和一个删除按钮的div。需要的是,当用户单击添加按钮时,它将动态添加此div,而当用户单击删除按钮时,它将删除此div。我可以使用以下方法动态添加一个输入元素(没有div容器)。
- 在状态变量中创建一个数组。
- 借助数组索引(如name0、name1)为动态输入字段指定名称
如何处理这么多的输入字段呢?当我将整个div作为一个单独的组件创建时,问题就更严重了。我使用的是基于类的组件。
handleChange=(event) =>
{
this.setState({[event.target.name]:event.target.values});
}
render()
{
return(
<div className="row">
<button type="button" onClick={this.addElement}>Add</button>
<div className="col-md-12 form-group">
<input type="text" className="form-control" name="name" value={this.state.name} onChange={this.handleChange} />
<input type="text" className="form-control" name="email" value={this.state.email} onChange={this.handleChange} />
<input type="text" className="form-control" name="phone" value={this.state.phone} onChange={this.state.phone} />
<button type="button" onClick={this.removeElement}>Remove</button>
</div>
</div>
)
}
4条答案
按热度按时间mklgxw1f1#
我会从配置的Angular 来处理这个问题,因为它的可扩展性更强。如果你想最终改变到像Formik或React Form这样的东西,它会让移动变得更容易。
有一个对象数组,你想把它转换成输入字段。你的主组件应该保持状态,不管
<Form />
组件是否显示,如果它是可见的,传入config和任何相关的处理程序。您的表单组件应该维护输入的状态,并且当您提交它时,会将完成状态传递给父组件。
第一个
ia2d9nvy2#
我希望这对你的问题有帮助。我做了一个有三个输入标签的子组件。
第一个
您也可以在下面的代码和框链接中查看代码。https://codesandbox.io/s/suspicious-heisenberg-xzchm
w8ntj3qf3#
写下如何生成你想要的东西的每一个细节是有点困难的。所以我发现准备一个
stackblitz
链接让你看看它是如何做到这一点要容易得多,这个链接已经准备好了:generating a dynamic div adding and removing by handling inputs state value
ndasle7k4#
第一个