React 非受控组件

简介: 在“React列表、键值与表单”一文介绍了用户录入表单数据的常规处理方式。本文将会配合refs的特性说明另外一种表单数据获取方式——非受控组件。

非受控组件(Uncontrolled Components)

使用非受控组件

在大部分情况下,推荐使用 受控组件 来实现表单、输入框等状态控制。在受控组件中,表单等数据都有React组件自己处理。这里将介绍另外一种非受控组件,表单的数据有Dom自己控制。

非受控组件实现的重点是用Refs特性获取真实Dom来代替每次数据变更去更新组件的状态值。

例如下面的代码,在非受控组件中记录被用户输入的名字:

class NameForm extends React.Component {
  constructor(props) {
    super(props);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleSubmit(event) {
    //在提交时,直接使用ref获取的真实Dom获取值
    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>
    );
  }
}

尝试代码

由于在非受控组件中使用Refs特性获取了真实Dom的实例,所以在使用非受控组建时,更容易集成React和非React代码,在某些时候也可以省略一些代码。但是建议除了特殊情况,都使用受控组件。

如果想要深入理解什么情况下使用哪种组件,建议阅读 受控和不受控表单输入 一文。

组件默认值

在React渲染的生命周期,表单中的value属性会被覆盖Dom中的value值。在使用非受控组件时,通常需要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>
  );
}

例如中“defaultValue = "Bob"”就是指定了一个默认值。同样地, <input type="checkbox"> 和 <input type="radio"> 支持 defaultChecked属性, <select> 标签支持 defaultValue属性。

相关文章
|
3月前
|
缓存 前端开发 JavaScript
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
🌟蒋星熠Jaxonic,前端探索者。专注React Hooks深度实践,从原理到实战,分享状态管理、性能优化与自定义Hook精髓。助力开发者掌握函数组件的无限可能,共赴技术星辰大海!
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
|
8月前
|
缓存 前端开发 数据安全/隐私保护
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
312 68
|
8月前
|
缓存 前端开发 Java
在 React 中,组合组件和高阶组件在性能方面有何区别?
在 React 中,组合组件和高阶组件在性能方面有何区别?
288 67
|
8月前
|
前端开发 JavaScript 安全
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
354 62
|
11月前
|
移动开发 前端开发 API
React 音频播放器组件 Audio Player
本文介绍如何使用React创建音频播放器组件,涵盖核心功能如播放/暂停、进度条、音量控制和时间显示。通过HTML5 `&lt;audio&gt;` 元素和React的声明式状态管理,实现交互式音频播放。常见问题包括控件不响应、进度条无法更新和音量控制失灵,并提供解决方案。此外,还讨论了浏览器兼容性、异步错误处理和性能优化等易错点及避免方法。
832 123
|
10月前
|
前端开发 JavaScript
除了使用Route组件,React Router还有其他方式处理404错误页面吗
除了使用Route组件,React Router还有其他方式处理404错误页面吗
290 58
|
10月前
|
前端开发
React 中高阶组件的原理是什么?
React 中高阶组件的原理是什么?
254 57
|
10月前
|
前端开发 开发者
除了函数组件和类组件,React 还有其他创建组件的方式吗?
除了函数组件和类组件,React 还有其他创建组件的方式吗?
201 57
|
10月前
|
前端开发
如何在React Router中定义404错误页面组件?
如何在React Router中定义404错误页面组件?
276 57
|
10月前
|
前端开发
在 React 中使用高阶组件时,如何避免命名冲突?
在 React 中使用高阶组件时,如何避免命名冲突?
260 56