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

受控组件: 受控组件是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的状态和事件系统,而非受控组件则更加自由,但也需要自行处理更多的事情。

相关推荐
FRing031 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
excel1 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放1 小时前
Python基础语法练习题(73)
java·前端·python
鸿蒙开发2 小时前
Three.js 首帧卡顿排查:compileAsync 之后,为什么还会停一下?
react.js·three.js
风骏时光牛马2 小时前
面向复杂场景的大模型应用落地与能力优化实践
前端
小小善后师2 小时前
我做了个病历归档小程序,被 AI 识别的"最后一公里"狠狠上了一课
前端
H_Lisa2 小时前
我用 Express 写了个 MCP,Claude 直接调用我的 API 了
前端
IT_陈寒2 小时前
React的useEffect依赖数组把我坑惨了
前端·人工智能·后端
兰亭妙微UI设计公司3 小时前
兰亭妙微ui设计公司分享:B端组件命名如何支持团队协作
前端·javascript·vue.js
云和数据.ChenGuang4 小时前
光哥说Python 异常深度解析:从异常模型到工程化实践
java·前端·人工智能·python·langchain