gpt4 book ai didi

javascript - 如何在 React 上动态添加字段到表单

转载 作者:行者123 更新时间:2023-11-29 16:02:09 24 4
gpt4 key购买 nike

我制作了一个简单的 React 应用程序。我有一个带有字段的 React 表单。我们可以动态添加越来越多的相同字段。并一起提交。

也许我可以使用一段时间?但是怎么办?而且我必须在表单中动态添加字段名称,并动态添加字段以提交对象。

class Form extends Component {
constructor(props) {
super(props);
this.state = {
task: '',
count: [1]
};
this.addTask = this.addTask.bind(this);
this.change = this.change.bind(this);
}

render() {
return (
<div>
<h1>Form</h1>
<form onSubmit = {this.onSubmit} method='post'>
<div>
{this.state.count.map((item, index) => {
return (
<div key={index}>
<input type='text' value={this.state.task} name='task' onChange={this.change} />
</div>
)
})}
</div>

<button onClick={this.addTask}>addTask</button>
<button>submit</button>
</form>
</div>
);
}

addTask(e) {
e.preventDefault();
this.setState({
count: [...this.state.count, '1']
})
}

onSubmit = (e) => {
e.preventDefault();
const {submit} = this.props;
submit({
task: this.state.task
});

this.setState({
task: ''
})
};

change(event) {
const target = event.target;
const value = target.type === 'checkbox' ? target.checked : target.value;
const name = target.name;

this.setState({
[name]: value
});
}
}

export default connect(null, { submit })(Form);

最佳答案

您可以通过对象数组进行映射:

constructor(props) {
super(props);
this.state = {
task: '',
count: [1],
components: []
};
this.addTask = this.addTask.bind(this);
this.change = this.change.bind(this);
}

render() {
return (
<div>
<h1>Form</h1>
<form onSubmit = {this.onSubmit} method='post'>
<div>
{this.state.count.map((item, index) => {
return (
<div key={index}>
{this.state.components.map(comp => comp)}
</div>
)
})}
</div>

<button onClick={this.addTask}>addTask</button>
<button>submit</button>
</form>
</div>
);
}

addTask(e) {
e.preventDefault();
this.setState({
count: [...this.state.count, '1'],
components: this.state.components.concat(<input type='text' value={this.state.task} name='task' onChange={this.change} key={this.state.count.length + 1} />)
})
}

关于javascript - 如何在 React 上动态添加字段到表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51409698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com