受控组件和不受控组件的区别
受控组件
在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
受控组件和不受控组件的区别相关推荐
- [react] 受控组件和非受控组件有什么区别?
[react] 受控组件和非受控组件有什么区别? 受控组件用value和组件的state绑定,当value更新时,会自动更新state 非受控组件没有value,采用ref直接操作dom 个人简介 我 ...
- react受控组件和非受控组件区别
一.受控组件 在HTML中,表单元素的标签..等的值改变通常是根据用户输入进行更新. 在React中,可变状态通常保存在组件的状态属性中,并且只能使用 setState() 进行更新,而呈现表单的Re ...
- 【React】知识点归纳:受控组件与非受控组件区别
React: 受控组件与非受控组件区别 受控组件 示范代码: 原理图: 非受控组件 示范代码: 结论 受控组件 在HTML中,标签<input>.<textarea>.< ...
- React 中的受控组件和非受控组件的区别
React 中受控和非受控的概念通常跟 form 表单组件相关,比如 input ,通过区分与 input 进行数据交互的方式,组件被分成两个不同的派系,受控与非受控. 受控组件 React 中受控组 ...
- 受控组件和非受控组件的区别
受控组件: 标签 input.textarea.select的值的改变通常是根据用户输入进行更新,所以受控组件是必须要有value的,value用来传入一个参数,结合onchang来控制这个参数输出. ...
- 深入react技术栈(10):受控组件和非受控组件
我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣 受控组件 非受控组件 受控组件和非受控组件的区别 文章参考深入React技术栈
- React中受控组件和非受控组件
受控组件 在React中,每当表单的状态发生变化时,都会被写入到组件的state中,这种组件在React被称为受控组件.受控组件中,组件渲染的状态与它的value或者checked相对应.React通 ...
- 什么是React受控组件和非受控组件
React是一个非常流行的JavaScript库,用于构建Web应用程序.React中有两种类型的组件,受控组件和非受控组件.在本文中,我们将深入研究这两种组件的区别,优缺点以及如何选择适当的组件类型 ...
- React 的受控组件和非受控组件有什么不同
大家好,我是前端西瓜哥,今天我们来看看 React 的受控组件和非受控组件有什么不同. 受控组件 受控组件,指的是将表单元素的值交给组件的 state 来保存. 例子: import './style ...
- react受控组件与非受控组件
react受控组件与非受控组件区别在于: 受控组件中输入框的值由其change事件接管,做对应的数据劫持操作,例如可以对输入框的值进行合法输入校验(匹配正则),此时表单数据由 React 组件来管理( ...
最新文章
- 全长转录组测序在植物中的应用研究进展 赵陆滟,曹绍玉,龙云树,张应华,许俊强
- 哀悼!华人著名计算机科学家刘炯朗逝世,图灵奖得主姚期智为其得意门生
- 牛客练习赛26 D	xor序列 (线性基)
- C# 进程Process基本的操作说明
- 【Pytorch神经网络实战案例】16 条件WGAN模型生成可控Fashon-MNST模拟数据
- C++_类和对象_C++多态_虚析构和纯虚析构函数---C++语言工作笔记074
- 《数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)》一一第0章 初识数字图像处理与机器视觉...
- totolink服务器未响应,WiFi效果差的罪魁祸首竟然是这个 TOTOLINK为你深度讲解
- mysql跳脱字符 单引号_MYSQL特殊字符(单引号,行尾斜杠)的处理
- 1.1 线性模型基础
- 设计模式_07_单例模式
- es6之模块化(module)--绝对能看懂
- AQM-8125空气质量监测系统
- Flutter热重载原理探索调试
- 钉钉、企业微信平台发送工资条程序--燕春科技工资条管理系统2.0
- android相机权限xml,Android相机权限检测兼容问题
- androidframework面试,35岁程序员的人生感悟
- python tkinter button 透明图片_如何使Tkinter支持PNG透明?
- cannot find -lxxx
- Qt问题:中文乱码+常量中有换行符
热门文章
- Oracle database 安装在 Linux(rhel,oel,centos)上的用户设置
- 信息安全系统设计基础第十二周学习总结
- LOADRUNNER 登陆功能测试实例(转)
- 全1的向量与行向量或列向量相乘,实质上是作行复制或列复制!
- java 自己抛空指针异常_java Timetask 访问service 抛空指针异常解决方案
- leetcode算法题--Letter Case Permutation
- leetcode算法题--二叉树中的列表★
- 太原益学领军2021年高考成绩查询,益学领军 | 2020寒假高三拼命班火爆进行中
- html每个段落空前空两格,科普:为什么段落开始要空两格(两个汉字)?
- 您试图打开以前版本的Microsoft Office创建的文件。注册表策略设置已阻止此文件在该版本中打开的解决办法