之前的一篇文章里,写过关于忘记密码这部分的业务,今天这个主要是详细写密码编辑这一块功能,需求也很明确,考虑到密码未输入,密码输入错误以及确认密码等情况,代码里面会添加注释.总结一点,写react组件概括就是封装函数,将函数调用到不同的生命周期钩子触发响应事件

`import React from 'react';``import message from 'antd/lib/message';`import { View } from 'core';   //组件继承传值封装import { Log, Toolkit } from 'util';  //工具封装export default class EditPassWordView extends View {    constructor(props) {        super(props);        this.state = {            showSuccessWin: false,//密码修改成功提示框显示开关            password: '',   //输入密码            showError: false,   // 密码输入错误显示            showError1: false,  // 新密码未输入错误显示            showError2: false,  //新密码和确认密码输入错误显示            errorMsg: '',   //错误信息            newpassword: '',    //输入新密码            surepassword: '',   //输入确认密码        };        this.validateCallBack = this.validateCallBack.bind(this);        this.handleCloseWin = this.handleCloseWin.bind(this);    }    /*     *检查旧密码是否正确    */    _checkPassword() {        if (!this.state.password) {            return false;        }        this.props.action.checkPassword({            oldPassword: this.state.password,            uid: this.props.uid, //找到唯一键值        }).then((respData) => {            if (respData.code === 0) {                this.setState({                    showError: false,                });            } else {                this.setState({                    showError: true,                    showError1: false,                    showError2: false,                    errorMsg: respData.msg,                });            }        }, (error) => {            Log.error(error.reason);        });        return false;    }    /**     * 校验密码强度回调函数     * @param {*string} validateFlag 校验结果     * @param {*string} errTips 错误提示语     */    validateCallBack(validateFlag, errTips) {        // 校验失败        if (!validateFlag) {            this.setState({                showError: false,                showError2: false,                showError1: true,                errorMsg: errTips,            });        }    }    /*     *修改密码    */    _editPassword() {        const { password, newpassword, surepassword } = this.state;        // if (!this.validatePassWord(password)) {        //     return false;        // }        if (!password) {            this.setState({                showError: true,                showError2: false,                showError1: false,                errorMsg: '请输入密码',            });            return false;        }        if (!Toolkit.validatePassWord(newpassword, this.validateCallBack)) {            return false;        }        if (newpassword !== surepassword) {            this.setState({                showError2: true,                showError: false,                showError1: false,                errorMsg: '两次密码输入不一致!',            });            return false;        }        const data = {            oldPassword: password,            newPassword: newpassword,            uid: this.props.uid,        };        this.props.action.editPassword(data).then((respData) => {            if (respData.code === 0) {                this.setState({                    showError2: false,                    showSuccessWin: true,                });            } else {                message.error(respData.msg || respData.reason);            }        }, (error) => {            message.error(error.msg || error.reason);            Log.error(error.reason);        });        return false;    }    /**     * 关闭弹出框事件     */    handleCloseWin() {        this.setState({            showSuccessWin: false,            password: '',            newpassword: '',            surepassword: '',        });    }    /**     * 渲染密码修改成功的提示弹出框     */    _renderPopWin() {        const { showSuccessWin } = this.state;        if (showSuccessWin) {            return (                <div className="stopPropa dyModal pop-win-box">                    <div className="wrap">                        <div className="dyModalBg" />                        <div className="modalContent">                            <div className="header">                                <h3>提示</h3>                                <i className="close-icon" onClick={this.handleCloseWin} />                            </div>                            <div className="content">                                <div className="tips">                                    <p style={{ fontWeight: 'bold' }}>密码修改成功</p>                                    <p className="sub">请使用新密码重新登录一次</p>                                </div>                                <div className="btn-box">                                    <a className="btn-sure" href={this.props.logoutUrl}>确定</a>                                </div>                            </div>                        </div>                    </div>                </div>            );        }        return '';    }    _render() {        return (            <div>                {this._renderPopWin()}                <div className="change_password">                    <h1>修改密码</h1>                    <ul>                        <li>                            <span>原密码:</span>                            <input                                type="password"                                name="password"                                value={this.state.password}                                onChange={(evt) => {                                    this.setState({                                        showError: false,                                        showError2: false,                                    });                                    this.state.password = evt.target.value;                                }}                                onKeyUp={                                    (evt) => {                                        if (evt.keyCode === 13) {                                            this._editPassword();                                        }                                    }                                }                            />                            <strong                                className="password"                                style={{ display: this.state.showError ? 'block' : 'none' }}                            >{this.state.errorMsg}</strong>                        </li>                        <li>                            <span>新密码:</span>                            <input                                type="password"                                name="newpassword"                                value={this.state.newpassword}                                onChange={(evt) => {                                    this.setState({                                        showError1: false,                                        showError2: false,                                    });                                    this.state.newpassword = evt.target.value;                                }}                                onKeyUp={                                    (evt) => {                                        if (evt.keyCode === 13) {                                            this._editPassword();                                        }                                    }                                }                            />                            <strong                                className="password"                                style={{ display: this.state.showError1 ? 'block' : 'none' }}                            >{this.state.errorMsg}</strong>                        </li>                        <li>                            <span>确认密码:</span>                            <input                                type="password"                                name="surepassword"                                value={this.state.surepassword}                                onChange={(evt) => {                                    this.setState({                                        showError2: false,                                    });                                    this.state.surepassword = evt.target.value;                                }}                                onKeyUp={                                    (evt) => {                                        if (evt.keyCode === 13) {                                            this._editPassword();                                        }                                    }                                }                            />                            <strong                                className="password"                                style={{ display: this.state.showError2 ? 'block' : 'none' }}                            >{this.state.errorMsg}</strong>                        </li>                    </ul>                    <button                        onClick={this._editPassword.bind(this)}                    >修改密码</button>                </div>            </div>        );    }}