React
HTML
<div id="app"></div>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
li {
margin: 8px 0;
}
h2 {
font-weight: bold;
margin-bottom: 15px;
}
input {
margin-right: 5px;
}
.error {
color: #f00;
}
React
class SampleApp extends React.Component {
constructor(props) {
super(props)
this.state = {
errors: {}
}
}
handleInput = (event) => {
const target = event.target
const errors = Object.assign({}, this.state.error)
delete errors[target.name]
this.setState({errors})
}
handleSubmit = (event) => {
const username = document.getElementById('username')
const errors = {}
if (!username.value.trim()) {
errors[username.name] = 'Username is required'
}
console.log(errors)
this.setState({ errors })
}
render() {
return (
<div>
<label>Username: </label>
<input type="text" id="username" name="username" onChange={this.handleInput} /> {this.state.errors['username'] &&
<div class="error">{this.state.errors['username']}</div>
}
<br/><button onClick={this.handleSubmit}>Submit</button>
</div>
)
}
}
ReactDOM.render(<SampleApp />, document.querySelector("#app"))