Использование onBlur с JSX и React

Я пытаюсь создать функцию подтверждение пароля, что делает ошибку только после того, как пользователь покидает поле подтверждения. Я работаю с Facebook React JS. Это мой входной компонент:

<input
    type="password"
    placeholder="Password (confirm)"
    valueLink={this.linkState('password2')}
    onBlur={this.renderPasswordConfirmError()}
 />

Это renderPasswordConfirmError:

renderPasswordConfirmError: function() {
  if (this.state.password !== this.state.password2) {
    return (
      <div>
        <label className="error">Please enter the same password again.</label>
      </div>
    );
  }  
  return null;
},

когда я запускаю страницу, сообщение не отображается при вводе конфликтующих паролей.

1 ответов


здесь есть несколько проблем.

1: onBlur ожидает обратного вызова, и вы призываете renderPasswordConfirmError и, используя возвращаемое значение, равное null.

2: вам нужно место для отображения ошибки.

3: вам нужен флаг для отслеживания "and I validating", который вы бы установили в true при размытии. Вы можете установить значение false на фокус, если хотите, в зависимости от желаемого поведения.

handleBlur: function () {
  this.setState({validating: true});
},
render: function () {
  return <div>
    ...
    <input
        type="password"
        placeholder="Password (confirm)"
        valueLink={this.linkState('password2')}
        onBlur={this.handleBlur}
     />
    ...
    {this.renderPasswordConfirmError()}
  </div>
},
renderPasswordConfirmError: function() {
  if (this.state.validating && this.state.password !== this.state.password2) {
    return (
      <div>
        <label className="error">Please enter the same password again.</label>
      </div>
    );
  }  
  return null;
},