Skip to content

Instantly share code, notes, and snippets.

@sadam1807
Last active June 13, 2021 16:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sadam1807/c68a88fefe0c3654532a427068a730e0 to your computer and use it in GitHub Desktop.
Save sadam1807/c68a88fefe0c3654532a427068a730e0 to your computer and use it in GitHub Desktop.
import React from "react";
import './styles.css'
class App extends React.Component {
constructor(props) {
super(props)
this.state = {
formValues: [{ name: "", email : "" }]
};
this.handleSubmit = this.handleSubmit.bind(this)
}
handleChange(i, e) {
let formValues = this.state.formValues;
formValues[i][e.target.name] = e.target.value;
this.setState({ formValues });
}
addFormFields() {
this.setState(({
formValues: [...this.state.formValues, { name: "", email: "" }]
}))
}
removeFormFields(i) {
let formValues = this.state.formValues;
formValues.splice(i, 1);
this.setState({ formValues });
}
handleSubmit(event) {
event.preventDefault();
alert(JSON.stringify(this.state.formValues));
}
render() {
return (
<form onSubmit={this.handleSubmit}>
{this.state.formValues.map((element, index) => (
<div className="form-inline" key={index}>
<label>Name</label>
<input type="text" name="name" value={element.name || ""} onChange={e => this.handleChange(index, e)} />
<label>Email</label>
<input type="text" name="email" value={element.email || ""} onChange={e => this.handleChange(index, e)} />
{
index ?
<button type="button" className="button remove" onClick={() => this.removeFormFields(index)}>Remove</button>
: null
}
</div>
))}
<div className="button-section">
<button className="button add" type="button" onClick={() => this.addFormFields()}>Add</button>
<button className="button submit" type="submit">Submit</button>
</div>
</form>
);
}
}
export default App;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment