【问题标题】:React Controlled vs Uncontrolled inputs反应受控与不受控制的输入
【发布时间】:2016-08-03 20:47:46
【问题描述】:

我按照 React Form 教程创建了下面的组件:

export default class SignInForm extends React.Component {
  constructor(props) {
    super(props)

    this.state = {
      email: '',
      password: ''
    }

    this.onEmailChange = this.onEmailChange.bind(this)
    this.onPasswordChange = this.onPasswordChange.bind(this)
  }

  onEmailChange(event) {
    this.setState({email: event.target.value})
  }

  onPasswordChange(password) {
    this.setState({password: event.target.value})
  }

  render() {
    return (
      <form onSubmit={this.props.handleSubmit}>
        <div>
          <label>Email</label>
          <div>
            <input type="email"
              placeholder="you@gmail.com"
              onChange={this.onEmailChange}
              value={this.state.email}
            />
          </div>
        </div>
        <div>
          <label>Password</label>
          <div>
            <input type="password"
              placeholder="Password"
              onChange={this.onPasswordChange}
              value={this.state.password}
            />
          </div>
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
      </form>
    )
  }
}

表单一呈现,我就会收到以下错误:

SignInForm 正在将密码类型的受控输入更改为 不受控制。输入元素不应从受控切换到 不受控制(反之亦然)。决定使用受控或 组件生命周期内不受控制的输入元素

我找不到让它成为不受控制的组件的地方。我做错了什么?

【问题讨论】:

  • 我收到此错误是因为我忘记为该值设置初始状态,将其添加为注释以防对其他人有所帮助。

标签: reactjs


【解决方案1】:

看起来你的 onPasswordChange 方法应该是:

onPasswordChange(event) {
    this.setState({password: event.target.value})
}

【讨论】:

  • 万一有其他像我这样的可怜的读者:不同的是OP的函数参数(密码)应该是(事件)。
猜你喜欢
  • 2020-08-27
  • 1970-01-01
  • 2020-10-09
  • 2017-06-19
  • 1970-01-01
  • 2019-07-09
  • 2020-11-01
  • 2017-07-25
  • 1970-01-01
相关资源
最近更新 更多