美文网首页
4.Uncontrolled Components(不受控组件)

4.Uncontrolled Components(不受控组件)

作者: 前端xiyoki | 来源:发表于2017-02-18 14:59 被阅读0次

    React版本:15.4.2
    **翻译:xiyoki **

    在大多数情况下,我们建议使用受控组件来实现表单。在受控组件中,表单数据由React组件处理。替代方法是不受控组件,其中表单数据由DOM本身处理。
    编写不受控组件而不是为每个状态更新编写事件处理程序,你可以使用ref从DOM获取表单值。
    例如,在一个不受控的组件中,此代码接收单个名称:

    class NameForm extends React.Component {
      constructor(props) {
        super(props);
        this.handleSubmit = this.handleSubmit.bind(this);
      }
    
      handleSubmit(event) {
        alert('A name was submitted: ' + this.input.value);
        event.preventDefault();
      }
    
      render() {
        return (
          <form onSubmit={this.handleSubmit}>
            <label>
              Name:
              <input type="text" ref={(input) => this.input = input} />
            </label>
            <input type="submit" value="Submit" />
          </form>
        );
      }
    }
    

    由于不受控组件在DOM中保持了真实来源,因此当使用不受控组件时,有时更容易集成React和非React代码。如果你想quick和dirty,它也可以稍微少一些代码。否则,通常应使用受控组件。
    如果仍然不清楚在特定情况下应该使用哪种类型的组件,则这篇文章能为你提供帮助this article on controlled versus uncontrolled inputs

    Default Values(默认值)

    在React渲染生命周期中,表单元素上的value属性将覆盖DOM中的值。对于不受控组件,你通常希望React指定初始值,但不要控制后续更新。要处理这种情况,你可以指定defaultValue属性而不是value属性。

    render() {
      return (
        <form onSubmit={this.handleSubmit}>
          <label>
            Name:
            <input
              defaultValue="Bob"
              type="text"
              ref={(input) => this.input = input} />
          </label>
          <input type="submit" value="Submit" />
        </form>
      );
    }
    

    同样,<input type="checkbox"><input type="radio">支持 defaultChecked,<select>支持defaultValue

    相关文章

      网友评论

          本文标题:4.Uncontrolled Components(不受控组件)

          本文链接:https://www.haomeiwen.com/subject/nnnrwttx.html