Skip to content

Instantly share code, notes, and snippets.

@negamaxi
Last active September 1, 2018 20:02
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 negamaxi/49c41faed81df7811f917b676d54dd32 to your computer and use it in GitHub Desktop.
Save negamaxi/49c41faed81df7811f917b676d54dd32 to your computer and use it in GitHub Desktop.
Simple React forms
// External state example (Redux e.g)
class SimplerReactForm extends React.Component {
handleInputChange = (e) => {
const { name, value } = e.target
this.props.onChange({
...this.props.values,
[name]: value
})
}
handleSubmit = () => {
// do stuff with this.props.values
}
render() {
return(
<form onSubmit={this.handleSubmit}>
<input
name="login"
type="text"
placeholder="login"
value={this.props.values.login}
onChange={this.handleChange}
/>
<input
name="password"
type="password"
placeholder="password"
value={this.props.values.password}
onChange={this.handleChange}
/>
<button>
submit
</button>
</form>
)
}
}
// Local state example
class SimplerReactForm extends React.Component {
state = {
login: "",
password: ""
}
handleInputChange = (e) => {
const { name, value } = e.target
this.setState({
[name]: value
})
}
handleSubmit = () => {
// do stuff with this.state
}
render() {
return(
<form onSubmit={this.handleSubmit}>
<input
name="login"
type="text"
placeholder="login"
value={this.state.login}
onChange={this.handleChange}
/>
<input
name="password"
type="password"
placeholder="password"
value={this.state.password}
onChange={this.handleChange}
/>
<button>
submit
</button>
</form>
)
}
}
// Uncontrolled form example
class SimplerReactForm extends React.Component {
handleSubmit = e => {
e.preventDefault();
const formData = new FormData(e.target);
// you can submit it like that
// or you can covert it to a json
const jsonData = Array
.from(formData)
.reduce((acc, [name, value]) => {
acc[name] = value;
return acc
}, {})
};
render() {
return (
<form onSubmit={this.handleSubmit}>
<input
name="login"
type="text"
placeholder="login"
/>
<input
name="password"
type="password"
placeholder="password"
/>
<button>
submit
</button>
</form>
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment