React
by MuLtDirectX
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;
}
.done {
color: rgba(0, 0, 0, 0.3);
text-decoration: line-through;
}
input {
margin-right: 5px;
}
React
class App extends React.Component {
constructor (props) {
super(props)
this.state = {
firstName: '',
secondName: '',
email: '',
phoneNumber: '',
password: '',
confirmPassword: ''
}
}
handleFirstNameChanging (e) {
this.setState({ firstName: e.currentTarget.value })
}
handleSecondNameChanging (e) {
this.setState({ secondName: e.currentTarget.value })
}
handleEmailChanging (e) {
this.setState({ email: e.currentTarget.value })
}
handlePhoneNumberChanging (e) {
this.setState({ phoneNumber: e.currentTarget.value })
}
handlePasswordChange (e) {
this.setState({ password: e.currentTarget.value })
}
handlePasswordConfirmChange (e) {
this.setState({ confirmPassword: e.currentTarget.value })
}
render () {
let firstNameFlag = false;
(this.state.firstName.length < 3) ? firstNameFlag = false : firstNameFlag = true
let secondNameFlag = false;
((this.state.secondName.length < 3)) ? secondNameFlag = false : secondNameFlag = true
let emailFlag = false;
(!this.state.email.match(/^[-._a-z0-9]+@(?:[a-z0-9][-a-z0-9]+\.)+[a-z]{2,6}$/))
? emailFlag = false : emailFlag = true
let phoneNumberFlag = false;
(!this.state.phoneNumber.match(/^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/))
? phoneNumberFlag = false : phoneNumberFlag = true
let passwordFlag = false;
((this.state.password.length > 3) && (this.state.confirmPassword.length > 3)
&& (this.state.password === this.state.confirmPassword)) ? passwordFlag = true : passwordFlag = false
return (
<form className='form'>
<p>First name (more than 3 letters)</p>
<input
type='text'
value={this.state.firstName}
onChange={this.handleFirstNameChanging.bind(this)}
style={(!firstNameFlag) ? { border: '2px solid red' } : { border: '2px solid green' }}
/>
<p>Second name (more than 3...