【问题标题】:Why are my required inputs being highlighted before the user enters text?为什么在用户输入文本之前我需要的输入被突出显示?
【发布时间】:2021-03-23 00:22:11
【问题描述】:

我正在构建一个包含登录/注册表单的 React 组件。显示哪个表单由用户通过单击相关选项卡来确定,这会更新状态中的reglog 的值。但是,我的问题是,如果用户在任一表单的前两个输入中输入文本,如果他们切换到另一个表单,则该表单的前两个输入将突出显示为红色,即使用户没有输入任何内容这些输入。我截取了一些截图来说明我的意思:

有人能解释为什么会这样吗?这只是一个小问题,但我想至少了解它发生的原因:)

这是组件的render()方法内的表单:


<aside className="logReg">
    <ul className="tabGroup">
        <li className={`tab${this.state.reg ? " active" : ""}`} onClick={this.handleClick}>Register</li>
        <li className={`tab${this.state.log ? " active" : ""}`} onClick={this.handleClick}>Login</li>
    </ul>
    {this.state.reg ?
        <form className="form" id="register" />
            <label className="label">Full Name</label>
            <input className="input" type="text" onChange={ this.handleRegName } value={ this.state.register.name } required/>

            <label className="label">Email</label>
            <input className="input" type="email" onChange={ this.handleRegEmail } value={ this.state.register.email } required/>

            <label className="label">Password</label>
            <input className="input" type="password" onChange={ this.handleRegPass } value={ this.state.register.pass } required/>

            <label className="label">Password Confirmation</label>
            <input className="input" type="password" onChange={ this.handleRegConf } value={ this.state.register.conf } required/>

            <button className="formButton" type="submit">Register</button>
        </form>
    :
        <form className="form" id="login" >
            <label className="label">Email</label>
            <input className="input" type="email" onChange={ this.handleLogEmail } value={ this.state.login.email } required/>

            <label className="label">Password</label>
            <input className="input" type="password" onChange={ this.handleLogPass } value={ this.state.login.pass } required/>

            <button className="formButton" type="submit">Login</button>
        </form>
    }
</aside>

这是我的状态结构:

        this.state = {
            reg: true,
            register: {
                name: "",
                email: "",
                pass: "",
                conf: ""
            },
            log: false,
            login: {
                email: "",
                pass: ""
            }
        }

这是我的一些方法(所有handleRegEmail/handleLogName 等都遵循与下面handleRegName(e) 相同的结构):

    handleClick(){
        let currentReg = this.state.reg;
        let currentLog = this.state.log;
        this.setState({
            reg: !currentReg,
            log: !currentLog
        })
    }

    handleRegName(e){
        let registerCopy = JSON.parse(JSON.stringify(this.state.register));
        registerCopy.name = e.currentTarget.value;
        this.setState({ 
            register: registerCopy
        });
    }

【问题讨论】:

  • 看起来你应该也应该包含组件的逻辑。哇,还在使用类组件?另外,我认为您评论操作和方法的方式不适用于 jsx,请尝试将其删除
  • @JenaroCalviño,我已经用一些逻辑更新了我的原始帖子。是的,我现在已经使用了类组件,因为这个应用程序最初非常小/简单,但是现在它正在增长,我计划将我的大部分组件转换为功能组件更进一步!

标签: javascript html reactjs forms input


【解决方案1】:

检查您在哪里实现用于验证表单的逻辑,问题的原因可能就在那里。

也尝试将name 属性添加到您的输入元素并使用它进行验证?

也许您使用type['...'] 进行验证?

希望这些帮助

【讨论】:

  • 我还没有向这个表单添加任何我自己的验证,我相信目前唯一的客户端验证是每个输入的required 属性。
猜你喜欢
  • 2020-03-21
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 2022-11-18
  • 1970-01-01
  • 2022-01-16
相关资源
最近更新 更多