如何理解受控和非受控件组件?

受控组件: 受控组件是React中的一种组件,其特点是输入框的值(value)由React状态(state)控制。也就是说,React中的状态变化会直接影响输入框的值。受控组件通过form的输入元素(input, select等)的value属性绑定到状态上,然后通过onChange事件来更新状态。也就是说,用户在输入框中的输入会触发onChange事件,然后更新React状态,进而重新渲染组件。

例如:

javascript 复制代码
class Controlled extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      inputValue: '',
    };
  }

  handleInputChange = (event) => {
    this.setState({
      inputValue: event.target.value,
    });
  };

  render() {
    return (
      <input 
        type="text"
        value={this.state.inputValue}
        onChange={this.handleInputChange}
      />
    );
  }
}
  1. 非受控组件: 非受控组件与受控组件相反,输入框的值不由React状态控制,而是由用户输入的内容直接赋值。非受控组件只接受并响应来自用户的事件,例如onChange事件。它们不会影响输入元素的值。非受控组件主要用于处理一些不希望React状态改变的场景,例如一些只读或者只写的输入框。

例如:

javascript 复制代码
class Uncontrolled extends React.Component {
  constructor(props) {
    super(props);
  }

  handleInputChange = (event) => {
    console.log(event.target.value);  // 输出用户输入的值
  };

  render() {
    return (
      <input 
        type="text"
        value={this.props.value}  // 由外部传入的值控制输入框的值
        onChange={this.handleInputChange}
      />
    );
  }
}

总结:受控和非受控是两种处理表单输入元素的方式,受控组件完全依赖于React的状态和事件系统,而非受控组件则更加自由,但也需要自行处理更多的事情。

相关推荐
砚底藏山河5 分钟前
python、JavaScript 、JAVA,定制化数据服务,助力业务高效落地
java·javascript·python
JavaAgent架构师10 分钟前
前端AI工程化(一):AI通信协议深度解析
前端·人工智能
11_x12 分钟前
JS 底层:乖宝宝引擎和乖宝宝声明
javascript
flex罗小黑13 分钟前
前端手机号脱敏的 4 个层级,你在第几层?
javascript
林恒smileZAZ13 分钟前
前端如何让图片、视频、pdf等文件在浏览器直接下载而非预览
前端·pdf
孙69034217 分钟前
electron播放本地任意格式的视频
前端·javascript
小小小小宇23 分钟前
设计稿转代码:如何将生成代码与内部组件库关联
前端
七牛云行业应用23 分钟前
别每个 AI 工具单独配了!MCP 一次搭建,Claude、Cursor、TRAE 全能用
前端
_xaboy24 分钟前
FormCreate 设计器 v6.3 正式发布:AI 表单助理3.0登场!
前端·vue.js·低代码·开源·表单设计器
胡志辉25 分钟前
邮件中点击“加载图片”,你的IP地址已经被泄漏
前端·后端·安全