受控组件

在HTML中,标签<input>、<textarea>、<select>的值的改变通常是根据用户输入进行更新。在React中,可变状态通常保存在组件的状态属性中,并且只能使用 setState() 更新,而呈现表单的React组件也控制着在后续用户输入时该表单中发生的情况,以这种由React控制的输入表单元素而改变其值的方式,称为:“受控组件”。

class NameForm extends React.Component {constructor(props) {super(props);this.state = {name: ''};this.handleNameChange = this.handleNameChange.bind(this);}handleNameChange(event) {this.setState({ name: event.target.value });};render() {return (<div><input type="text" value={this.state.name} onChange={this.handleNameChange}/></div>
        );}
}

原理图:

  • name开始是空字符串''

  • 当键入a,并handleNameChange获取a和调用setState。然后,该输入被重新呈现为具有的值a

  • 当键入b,handleNameChange获取ab并设置该状态的值。现在再次重新渲染输入value="ab"。

这也意味着表单组件可以立即响应输入更改; 例如:

  • 就地反馈,如验证
  • 禁用按钮,除非所有字段都有有效的数据
  • 执行特定的输入格式,如信用卡号码

"受控"执行情况

元素 属性 方法 方法回调中的新值
<input type="text" /> value="string" onChange event.target.value
<input type="checkbox" /> checked={boolean} onChange event.target.checked
<input type="radio" /> checked={boolean} onChange event.target.checked
<textarea /> value="string" onChange event.target.value
<select /> value="option value" onChange event.target.value

可见效果:当注释 this.setState({value: event.target.value}); 这行代码,文本框再次输入时,页面不会重新渲染,所产生效果即是文本框输入不了值,即文本框值的改变受到 setState() 方法的控制,在未执行时,不重新渲染组件

不受控组件

表单数据由DOM本身处理。即不受setState()的控制,与传统的HTML表单输入相似,input输入值即显示最新值(使用 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>
    );}
}

结论

受控和不受控元素都有其优点,根据具体情况选择。如果表单在UI反馈方面非常简单,则对ref进行控制是完全正确的,即使用不受控组件。

特征 不受控制 受控
一次性检索(例如表单提交) yes yes
及时验证 no yes
有条件的禁用提交按钮 no yes
执行输入格式 no yes
一个数据的几个输入 no yes
动态输入 no yes

参考文章地址:

https://goshakkk.name/controlled-vs-uncontrolled-inputs-react/

转载于:https://www.cnblogs.com/aichenxy/p/6758004.html

受控组件和不受控组件的区别相关推荐

  1. [react] 受控组件和非受控组件有什么区别?

    [react] 受控组件和非受控组件有什么区别? 受控组件用value和组件的state绑定,当value更新时,会自动更新state 非受控组件没有value,采用ref直接操作dom 个人简介 我 ...

  2. react受控组件和非受控组件区别

    一.受控组件 在HTML中,表单元素的标签..等的值改变通常是根据用户输入进行更新. 在React中,可变状态通常保存在组件的状态属性中,并且只能使用 setState() 进行更新,而呈现表单的Re ...

  3. 【React】知识点归纳:受控组件与非受控组件区别

    React: 受控组件与非受控组件区别 受控组件 示范代码: 原理图: 非受控组件 示范代码: 结论 受控组件 在HTML中,标签<input>.<textarea>.< ...

  4. React 中的受控组件和非受控组件的区别

    React 中受控和非受控的概念通常跟 form 表单组件相关,比如 input ,通过区分与 input 进行数据交互的方式,组件被分成两个不同的派系,受控与非受控. 受控组件 React 中受控组 ...

  5. 受控组件和非受控组件的区别

    受控组件: 标签 input.textarea.select的值的改变通常是根据用户输入进行更新,所以受控组件是必须要有value的,value用来传入一个参数,结合onchang来控制这个参数输出. ...

  6. 深入react技术栈(10):受控组件和非受控组件

    我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣 受控组件 非受控组件 受控组件和非受控组件的区别 文章参考深入React技术栈

  7. React中受控组件和非受控组件

    受控组件 在React中,每当表单的状态发生变化时,都会被写入到组件的state中,这种组件在React被称为受控组件.受控组件中,组件渲染的状态与它的value或者checked相对应.React通 ...

  8. 什么是React受控组件和非受控组件

    React是一个非常流行的JavaScript库,用于构建Web应用程序.React中有两种类型的组件,受控组件和非受控组件.在本文中,我们将深入研究这两种组件的区别,优缺点以及如何选择适当的组件类型 ...

  9. React 的受控组件和非受控组件有什么不同

    大家好,我是前端西瓜哥,今天我们来看看 React 的受控组件和非受控组件有什么不同. 受控组件 受控组件,指的是将表单元素的值交给组件的 state 来保存. 例子: import './style ...

  10. react受控组件与非受控组件

    react受控组件与非受控组件区别在于: 受控组件中输入框的值由其change事件接管,做对应的数据劫持操作,例如可以对输入框的值进行合法输入校验(匹配正则),此时表单数据由 React 组件来管理( ...

最新文章

  1. 全长转录组测序在植物中的应用研究进展 赵陆滟,曹绍玉,龙云树,张应华,许俊强
  2. 哀悼!华人著名计算机科学家刘炯朗逝世,图灵奖得主姚期智为其得意门生
  3. 牛客练习赛26 D xor序列 (线性基)
  4. C# 进程Process基本的操作说明
  5. 【Pytorch神经网络实战案例】16 条件WGAN模型生成可控Fashon-MNST模拟数据
  6. C++_类和对象_C++多态_虚析构和纯虚析构函数---C++语言工作笔记074
  7. 《数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)》一一第0章 初识数字图像处理与机器视觉...
  8. totolink服务器未响应,WiFi效果差的罪魁祸首竟然是这个 TOTOLINK为你深度讲解
  9. mysql跳脱字符 单引号_MYSQL特殊字符(单引号,行尾斜杠)的处理
  10. 1.1 线性模型基础
  11. 设计模式_07_单例模式
  12. es6之模块化(module)--绝对能看懂
  13. AQM-8125空气质量监测系统
  14. Flutter热重载原理探索调试
  15. 钉钉、企业微信平台发送工资条程序--燕春科技工资条管理系统2.0
  16. android相机权限xml,Android相机权限检测兼容问题
  17. androidframework面试,35岁程序员的人生感悟
  18. python tkinter button 透明图片_如何使Tkinter支持PNG透明?
  19. cannot find -lxxx
  20. Qt问题:中文乱码+常量中有换行符

热门文章

  1. Oracle database 安装在 Linux(rhel,oel,centos)上的用户设置
  2. 信息安全系统设计基础第十二周学习总结
  3. LOADRUNNER 登陆功能测试实例(转)
  4. 全1的向量与行向量或列向量相乘,实质上是作行复制或列复制!
  5. java 自己抛空指针异常_java Timetask 访问service 抛空指针异常解决方案
  6. leetcode算法题--Letter Case Permutation
  7. leetcode算法题--二叉树中的列表★
  8. 太原益学领军2021年高考成绩查询,益学领军 | 2020寒假高三拼命班火爆进行中
  9. html每个段落空前空两格,科普:为什么段落开始要空两格(两个汉字)?
  10. 您试图打开以前版本的Microsoft Office创建的文件。注册表策略设置已阻止此文件在该版本中打开的解决办法