gpt4 book ai didi

reactjs - 如何使用reactjs动态生成一对输入字段

转载 作者:行者123 更新时间:2023-12-03 13:40:04 24 4
gpt4 key购买 nike

我尝试使用以下代码创建一个 react 表单来动态生成输入字段以逐一输入一系列人名。但用户需要输入名字姓氏,而不仅仅是名字。因此,表单需要生成一对动态输入字段。我是 react 新手。任何人都可以提示如何完成此任务。

注意:以下代码取自 @Mayank Shukla 在 How to implement a dynamic form with controlled components in React.JS? 的 stackoverflow 答案.

class App extends React.Component {
constructor(props) {
super(props);
this.state = { values: [] };
this.handleSubmit = this.handleSubmit.bind(this);
}

createUI(){
return this.state.values.map((el, i) =>
<div key={i}>
<input type="text" value={el||''} onChange={this.handleChange.bind(this, i)} />
<input type='button' value='remove' onClick={this.removeClick.bind(this, i)}/>
</div>
)
}

handleChange(i, event) {
let values = [...this.state.values];
values[i] = event.target.value;
this.setState({ values });
}

addClick(){
this.setState(prevState => ({ values: [...prevState.values, '']}))
}

removeClick(i){
let values = [...this.state.values];
values.splice(i,1);
this.setState({ values });
}

handleSubmit(event) {
alert('A name was submitted: ' + this.state.values.join(', '));
event.preventDefault();
}

render() {
return (
<form onSubmit={this.handleSubmit}>
{this.createUI()}
<input type='button' value='add more' onClick={this.addClick.bind(this)}/>
<input type="submit" value="Submit" />
</form>
);
}
}

ReactDOM.render(<App />, document.getElementById('container'));

最佳答案

想法是,在状态变量中维护一个对象数组。每个对象都有两个键 firstNamesecondName (您可以添加更多字段)。将每个对象视为一个单元,并为所有键渲染输入元素,每当用户单击“添加更多”时,就再添加一个对象/输入带有两个键的数组。

Working Fiddle.

工作片段:

class App extends React.Component {
constructor(props) {
super(props);
this.state = {
users: [{firstName: "", lastName: ""}]
};
this.handleSubmit = this.handleSubmit.bind(this);
}

addClick(){
this.setState(prevState => ({
users: [...prevState.users, { firstName: "", lastName: "" }]
}))
}

createUI(){
return this.state.users.map((el, i) => (
<div key={i}>
<input placeholder="First Name" name="firstName" value={el.firstName ||''} onChange={this.handleChange.bind(this, i)} />
<input placeholder="Last Name" name="lastName" value={el.lastName ||''} onChange={this.handleChange.bind(this, i)} />
<input type='button' value='remove' onClick={this.removeClick.bind(this, i)}/>
</div>
))
}

handleChange(i, e) {
const { name, value } = e.target;
let users = [...this.state.users];
users[i] = {...users[i], [name]: value};
this.setState({ users });
}

removeClick(i){
let users = [...this.state.users];
users.splice(i, 1);
this.setState({ users });
}

handleSubmit(event) {
alert('A name was submitted: ' + JSON.stringify(this.state.users));
event.preventDefault();
}

render() {
return (
<form onSubmit={this.handleSubmit}>
{this.createUI()}
<input type='button' value='add more' onClick={this.addClick.bind(this)}/>
<input type="submit" value="Submit" />
</form>
);
}
}

ReactDOM.render(<App />, document.getElementById('container'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="container" />

关于reactjs - 如何使用reactjs动态生成一对输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51457843/

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