受控组件就是为某个form表单组件添加value属性。
形式如下:

 render:function(){return <input type="text" value="Hello!" />}

添加了value属性的表单组件元素其内部是不会维护自己状态state,组件的value值一旦设置某个具体值就始终是这个值,所以需要调用者来控制组件value的改变。
这种写法会带来一个问题:渲染后input组建的用户交互,用户输入的任何值将不起作用,input输入框中的值始终为Hello!这与input表现不一致。
为此,为了控制该组件,就需要能够控制input组件的值,需要借助其内部的状态state,即组件内部要维护一个状态state以便于配合input组建的onChangesetState方法来完成对组建的控制;例如对上面形式可以进行封装一个inputItem组件,其内部维护一个state状态,具体代码如下:

 export default class InputItem extends React.Component{constructor(props){super(props);this.state = {value: ""}}componentWillReceiveProps(nextProps){this.setState({value: nextProps.value})}_onChange(evt){this.setState({value: evt.target.value})}render(){return (<input type="text" value={this.state.value} onChange={this._onChange.bind(this)}/>);}}

这样就可以在外部调用组件了:

 <InputItem value="this.state.userName" />

这样就可以控制react的input组件了,其实就是需要借助react的有状态component来完成,因为有状态component可以内部维护state
非受控组件表现形式上,react中没有添加value属性的表单组件元素就是非受控组件。表现形式如下:

 <input type="text" />

非抽空组件再底层实现时实在其内部维护了自己的状态state,这样表现出用户输入任何职都能反映到
元素上。

总结

在使用react component时,都会遇到受控组件或者非受控组件;在目前,react组件推荐使用stateless component,但是使用该形式来实现react component时使用非受控组件到倒是没有什么大问题,若是需要控制受控元素就会有出现问题,表现在:

`受控组件`需要主动维护一个内部state状态的,而`stateless component`是无需维护组件的state状态的,二者有冲突。

所以,受控元素就不能使用stateless component来创建。

鉴于受控组件与非受控组件的特点,二者应用的地方也有所不同,主要表现在:

受控元素,一般用在需要动态设置其初始值的情况;例如某些form表单信息编辑时,input表单元素需要初始显示服务器返回的某个值然后进行编辑。

非受控元素, 一般用于无任何动态初始值信息的情况; 例如form表单创建信息时,input表单元素都没有初始值,需要用户输入的情况

受控组件与费受控组件相关推荐

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

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

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

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

  3. 受控组件和非受控组件

    受控组件和非受控组件 React的受控组件与非受控组件的概念是相对于表单而言的,在React中表单元素通常会持有一下内部的state,因此它的工作方式与其他HTML元素不一样,而获取表单元素内部sta ...

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

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

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

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

  6. React-表单处理(受控组件,非受控组件)

    受控组件: value值受到了react状态控制的表单元素 React中将state中的数据与表单元素的value值绑定到了一起,由state的值来控制表单元素的值 非受控组件: 非受控组件借助于re ...

  7. React---什么是受控组件、非受控组件

    受控组件: 在随后的用户输入中,能够控制表单中输入元素的组件被称为受控组件,即每个状态更改都有一个相关联的处理程序. 例如,我们使用下面的 handleChange 函数将输入框的值转换成大写: ha ...

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

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

  9. 【REACT-受控组件和非受控组件】

    REACT-受控组件和非受控组件 概述 受控组件 非受控组件 受控组件应用ToDoList 概述 React中的组件根据是否受React控制可分为受控的和非受控的. React 中的受控组件和非受控组 ...

最新文章

  1. javac、jar使用实录
  2. 开放平台战略下的趣店用户“跨界”
  3. python能爬视频吗_Python爬取视频(其实是一篇福利)
  4. 禁止vim生成 un~文件
  5. C#UDP通讯UdpClient
  6. IOS开发CAKeyframeAnimation的基本使用与keypath的列举
  7. 用HttpClientFactory来实现简单的熔断降级
  8. Django模板中如何将函数的变量作为字典key并获取对应的value
  9. difftime C语言,C语言中difftime函数如何使用time_t*
  10. hibernate查询出的实体,set值后,自动更新到数据库
  11. 让你更好的使用jQuery插件
  12. ABAP字符串的加密与解密
  13. java 大学考试_大学java期末考试试题
  14. 从鸭子游戏设计看设计模式
  15. 如何跳出深层递归调用(不使用异常)
  16. 如何搭建一个团队(一)
  17. 估值报告写作第二讲——第五届CVA估值建模精英计划
  18. 京东 api 接口的如何使用
  19. 2021年特种作业证继电保护,2021电工作业考试题库
  20. 2020.1.30 封装和隐藏(四种访问权限修饰符)、this、JavaBean、继承、方法的重写

热门文章

  1. 当返回前端的数据中存在List对象集合,如何优雅操作?
  2. 字节跳动—— 机器学习面试岗位
  3. python打开excel文件后如何关闭文件_python – 添加数据后保存并关闭Excel文件?
  4. c语言管理系统开发,日记管理系统的开发(C语言版)
  5. 如何在 eclipse 打开ftl 文件
  6. SQL server提示“目录名称无效”解决办法
  7. 关于前段蛋疼的地方之 IE 和网景 的缠缠绵绵 - 事件篇(1)
  8. 稳稳当当学java之抽象类和接口(11)
  9. 信捷_PLC学习记录(一)
  10. 教授专栏09 | 彭倩: 港具优势 利好SPAC发展