javascript - 在 React 中检查密码验证

标签 javascript reactjs

我想检查 React 中重新密码的验证,我为此编写了这段代码,但是当您设置(例如)密码:“1234”和重新密码:“1234”时,它不适用但是当您输入第五个字符作为 Re-password 时,它变为 True 。 你知道什么是问题吗?

import React , { Component } from 'react'; 

export default class RegistrationForm extends Component {
    constructor(props) {
        super(props);
        this.state = {
            name: '',
            email:'',
            password :'',
            password_re:'',
            password_has_error:false
        };
    }


    checkPassword() {
         if(!this.state.password || this.state.password != this.state.password_re) {
            this.setState({password_has_error:true});
        }
        else {
            this.setState({password_has_error:false});
        }
    }

    handleChange(event) {
        this.setState({[event.target.name] : event.target.value });

        if (event.target.name == 'password' || event.target.name == 'password_re')
            this.checkPassword();
    }

    handleSubmit(event) {
        event.preventDefault(); 
        // TODO: will submit the form here
    }

    render(){
        return ( 
            <form onSubmit={(event)=>this.handleSubmit(event)}>
                <div>
                    <label>Name</label>
                    <input 
                        type="text" 
                        name="name" 
                        value={this.state.name} 
                        onChange={(event)=>this.handleChange(event)} 
                        />
                </div>
                <div>
                    <label>Email address</label>
                    <input 
                        name="email"
                        type="email" 
                        value={this.state.email} 
                        onChange={(event)=>this.handleChange(event)} 
                        /> 
                </div>
                <div>
                    <label>Password</label>
                    <input 
                        type="password" 
                        name="password" 
                        value={this.state.password} 
                        onChange={(event)=>this.handleChange(event)} 
                        />

                </div>
                <div>
                    <label>Re-enter password</label>
                    <input 
                        type="password" 
                        name="password_re" 
                        value={this.state.password_re} 
                        onChange={(event)=>this.handleChange(event)} 
                        />
                </div>
                <button type="submit">Submit</button>
            </form>
        ) 
    } 
}

编辑:这是我的 React 组件

最佳答案

这是因为,setState 是异步的,它不会立即更新状态值。

这样写,使用setState回调方法:

handleChange(event) {
  const { name, value } = e.target

  this.setState({
      [name] : value 
    }, () => {
      if (name == 'password' || name == 'password_re')
        this.checkPassword();
      }
    }
  );
}

检查此以获取有关 setState async behaviour 的更多详细信息.

关于javascript - 在 React 中检查密码验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50316698/

相关文章:

javascript - jquery on selection 禁用选项并使边框红色

javascript - 如果值为空,则不要在追加时添加类属性

javascript - 使用来自 ajax 的数据在 Laravel 中创建输入

javascript - 为什么我使用 jquery ajax 会收到状态 404?

reactjs - React 组件库 - 让手写笔工作

ios - Font Awesome 在我的 React Native 项目中未被识别

javascript - React 中的渲染函数中的状态为空

javascript - 动态生成的 html 不会换行到屏幕

reactjs - 使用apollo,响应头中的cookie但未设置

reactjs - React router 链接到条件渲染按钮