Вы должны отслеживать входное значение в состоянии, а не проверять только состояние borderStyling.
Основываясь на своем коде, вы можете изменить его на что-то вроде этого:
// keep track of your input changes
this.state = {
inputs: {
email: '',
name: '',
comment: '',
},
errors: {
email: false,
name: false,
comment: false,
}
};
// event handler for input changes
handleChange = ({ target: { name, value } }) => {
const inputChanges = {
...state.inputs,
[name]: value
}
const inputErrors = {
...state.errors,
[name]: value == ""
}
setState({
inputs: inputChanges,
errors: inputErrors,
});
}
HTML / JSX
// the name attribut for your input
<label>Name</label>
<input name="name" onChange={handleChange} className={
this.errors.name == "" ? 'form-input form-input-fail' : 'form-input'
} />
<label>Email</label>
<input name="email" onChange={handleChange} className={
this.errors.email == "" ? 'form-input form-input-fail' : 'form-input'
} />
<label>Message</label>
<textarea name="comment" onChange={handleChange} className={
this.errors.comment == "" ? 'form-input form-input-fail' : 'form-input'
} />
И если вы, вероятно, хотите реализовать его с помощью CSS и js, вы можете попробовать эту статью match-an-empty-input-box-using-css-and-js
Но попробуйте и научитесь делать ваш компонент многоразовым и сухим, потому что это начало использования приложения реакции.
[Пересмотренный]