受控组件

在React中,每当表单的状态发生变化时,都会被写入到组件的state中,这种组件在React被称为受控组件。受控组件中,组件渲染的状态与它的value或者checked相对应。React通过这种方式消除了组件的局部状态。React官方推荐使用受控组件。

受控组件更新state流程:

1. 可以通过在初始state中设置表单的默认值。
2. 每当表单的值发生变化时,调用onChange事件处理器。
3. 事件处理器通过合成事件对象e拿到改变后的状态,并更新state。
4. setState触发视图的重新渲染,完成表单组件值得更新。

非受控组件

简单的说,如果一个表单组件没有value props(单选按钮和复选框对应的是checked props)就可以称为非受控组件。这样,我们可以使用defaultValuedefaultChecked来表示组件的默认状态。

在React中,非受控组件是一种反模式,它的值不受组件自身的state或者props控制,通常需要为其添加ref prop来访问渲染后的底层DOM元素。

对比受控组件和非受控组件

我们刚看到通过defaultValue或者defaultChecked来设置表单的默认值,它仅会被渲染一次,在后续的渲染时并不起作用。

<inputvalue={this.state.value}onChange={(e) => this.setState({value: e.target.value})}
><input defaultValue={this.state.value}onChange={e => {this.setState({value: e.target.value})}}
>

在受控组件中,可以将用书输入的内容输出展示,而在非受控组件中,如果不绑定onChange事件,我们在文本框中输入任何内容都不会展示。可以看到受控组件和非受控组件的最大区别就是,非受控组件状态并不会受应用状态的控制,应用中也多了局部组件状态,而受控组件的值来源于state。

  • 性能上问题

在受控组件中,每次表单的值发生变化都会调用一次onChange时间处理器,这会有一些性能消耗,任然不提倡在React中使用受控组件,这个问题可以通过redux应用架构来达到状态统一。

React中受控组件和非受控组件相关推荐

  1. react中受控组件与非受控组件

    受控?什么受什么控制? 输入类表单元素的值 受 setState的控制 ​ 在HTML中,表单元素(如:input textarea select通常自己维护state,并根据用户输入进行更新.而在r ...

  2. React 之受控组件和非受控组件

    在React中,所谓受控组件和非受控组件,是针对表单而言的. 表单受控组件 表单元素依赖于状态,表单元素需要默认值实时映射到状态的时候,就是受控组件,这个和双向绑定相似. 受控组件,表单元素的修改会实 ...

  3. 【React】之受控组件和非受控组件

    React中的组件根据是否受React控制可分为受控的和非受控的. 一.受控组件 表单元素依赖于状态,表单元素需要默认值实时映射到状态的时候,就是受控组件,这个和双向绑定相似. 受控组件,表单元素的修 ...

  4. React的受控组件和非受控组件

    一.受控组件 表单元素依赖于状态,表单元素需要默认值实时映射到状态的时候,就是受控组件,这个和双向绑定相似. 受控组件,表单元素的修改会实时映射到状态值上,此时就可以对输入的内容进行校验. 受控组件只 ...

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

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

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

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

  7. react——非受控组件和非受控组件的应用

    非受控组件和非受控组件的应用 什么是非受控组件: 非受控组件:它应用的次数没有受控组件多,在工作中,多数使用为受控组件 非受控组件:表单项中的value或checked值,它不受state中的属性控制 ...

  8. React 受控组件和非受控组件(总结)

    React 受控组件和非受控组件 文章目录 React 受控组件和非受控组件 受控组件 非受控组件 拓展:什么是***event*.target** 受控组件 在React中,可变的状态通常保存在组件 ...

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

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

最新文章

  1. 2019/5/12 查漏补缺
  2. 谈谈程序链接及分段那些事
  3. 主表如何统计在附表中的出现次数?
  4. Mongodb实现多表join
  5. RabbitMQ和Kafka
  6. LNK2005 连接错误解决办法
  7. linux里面i386 i686 i486 i586代表什么?是什么意思
  8. hbase单机模式配置
  9. mybatis 依赖于jdbc_优于jdbc的mybatis框架入门
  10. 数字图像的5种增强处理
  11. NuCypher 已将共享策略访问周期持续时间从 24 小时延长至 7 天
  12. python fromarray_python --- 之pil image.fromarray
  13. 加密货币的天堂何在?
  14. CQUOJ月赛(5月)H题:zzblack与斐波那契数列
  15. 计算机二级是高级应用,计算机二级考试之office高级应用
  16. 图相关论文阅读与总结
  17. 史上最搞笑的程序员段子,你看懂了吗?
  18. python 操作微信订阅号(2022.7.1)
  19. Error while extracting response for type
  20. Codeforces Round #800 (Div. 2) E. Keshi in Search of AmShZ

热门文章

  1. 如何在VB6.0里动态使用具有事件的对象
  2. Win2003 R2 with SP2的MSDN版所有版本http下载,已收集全
  3. RabbitMQ的死信队列的应用
  4. 北大新成果!首次成功地将CNN解码器用于代码生成 | 论文+代码
  5. 中国团队屠榜:COCOMapillary挑战赛包揽全部冠军
  6. 英伟达发布全球最大GPU:性能提升10倍,售价250万
  7. JavaScript的封装
  8. C#的变量、数据类型转换、转义符
  9. 钱盾率先提出的“全流程屏障”究竟是怎样的一种能力?
  10. Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)