You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React类组件登录点击校验凭证功能的完整语法实现求助

React类组件登录校验实现方案

你需要新增3部分逻辑完成需求:

  • 给state新增错误提示字段,用来存储校验失败后的提示信息
  • 新增独立的登录校验方法,在方法内完成凭证匹配和后续跳转/报错逻辑
  • 页面渲染错误提示节点,替换原有按钮的直接跳转逻辑
constructor (props) {
    super(props);
    this.state = {
      email: '',
      password: '',
      error: '' // 新增错误提示字段
    }
  }

  handleUserInput = (e) => {
    const name = e.target.name;
    const value = e.target.value;
    this.setState({[name]: value})
  }

  // 新增登录校验方法
  handleLogin = () => {
    // 定义预设的合法用户凭证
    const validUser = {
      username: 'gerasimos',
      password: '27111980'
    }
    // 匹配表单输入和合法凭证:此处表单的email字段对应预设的username字段
    if (this.state.email === validUser.username && this.state.password === validUser.password) {
      // 校验通过跳转首页
      this.props.onRouteChange('home')
      // 跳转前可选择清空错误
      this.setState({error: ''})
    } else {
      // 校验失败设置错误提示
      this.setState({error: '用户名或密码输入错误,请重新输入'})
    }
  }

  render () {
    return (
    <article className="br2 ba dark-gray b--black-30 mv6 w-100 w-50-m w-25-l mw5 center">
      <main className="pa4 black-80">
        <div className="measure center">
          <fieldset id="sign_up" className="ba b--transparent ph0 mh0">
            <legend className="f4 fw6 ph0 mh0">Log In</legend>
            {/* 新增错误提示渲染节点 */}
            {this.state.error && <p className="f6 red mb2">{this.state.error}</p>}
            <div className="mt3">
              <label className="db fw6 lh-copy f6" htmlFor="email-address">Email</label>
              <input className="pa2 input-reset ba bg-transparent hover-bg-black hover-white w-100" 
                type="email" 
                name="email" 
                id="email-address"
                placeholder="Email"
                value={this.state.email}
                onChange={this.handleUserInput}  
              />
            </div>
            <div className="mv3">
              <label className="db fw6 lh-copy f6" htmlFor="password">Password</label>
              <input className="b pa2 input-reset ba bg-transparent hover-bg-black hover-white w-100" 
                type="password" 
                name="password"  
                id="password"
                placeholder="Password"
                value={this.state.password}
                onChange={this.handleUserInput}
              />
            </div>
          </fieldset>
          <div className="">
            <input  
              onClick={this.handleLogin} // 替换原有直接跳转逻辑,绑定校验方法
              className="b ph3 pv2 input-reset ba b--black bg-transparent grow pointer f6 dib"
              type="submit" 
              value="Log in" 
            />
          </div>
        </div>
      </main>
    </article>
    );
  }
}

如果后续你需要对接后端接口做真实校验,只需要把handleLogin里的本地凭证匹配逻辑替换为接口请求逻辑即可

内容的提问来源于stack exchange,提问作者Jungleyes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:27:00