React 受控组件和非受控组件

文章目录

  • React 受控组件和非受控组件
    • 受控组件
    • 非受控组件
  • 拓展:什么是***event*.target**

受控组件

在React中,可变的状态通常保存在组件的state属性中,而且只能使用**setState()**修改

受控组件行为全过程:当用户将数据输入到受控组件时,会触发修改状态的事件处理器,这时由你的代码来决定此输入是否有效(如果有效就使用更新后的值重新渲染)。如果不重新渲染,则表单元素将保持不变。

受控组件中要有**onChange()**方法

等同于vue中的双向绑定

代码展示

<body>
<!--    准备一个容器  --><div id="test"></div><!--    引入react核心库--><script type="text/javascript" src="../js/react.development.js"></script>
<!--引入reactdom,用于支持reavt操作dom--><script type="text/javascript" src="../js/react-dom.development.js"></script>
<!--    引入babel,用于将jsx转化为js--><script type="text/javascript" src="../js/babel.min.js"></script><script type="text/babel"> //创建组件class Login extends React.Component {//初始化状态state = {username:'',//用户名password:''//密码}//表单提交的回调handleSubmit=()=> {event.preventDefault() //阻止表单提交const {username,password} = this.statealert(`用户名:${username}密码:${password}`)}//保存用户名到状态中saveUsername=(event)=> {console.log(event.target.value);this.setState({username:event.target.value})}//保存到密码到状态中savePassword=(event)=> {console.log(event.target.value);this.setState({password:event.target.value})}render (){return(<form  onSubmit={this.handleSubmit}>用户名:<input onChange={this.saveUsername} type="text" name="username"/> 密码:<input onChange={this.savePassword}  type="password" name="password"/> <button>登录</button></form>)}}ReactDOM.render(<Login/>,document.getElementById('test'))</script>
</body>

非受控组件

非受控组件不需要写事件处理函数,由DOM自身进行维护。

一般通过Ref进行DOM的绑定,即使用ref 来从 DOM 节点中获取表单数据

代码展示

<body>
<!--    准备一个容器  --><div id="test"></div><!--    引入react核心库--><script type="text/javascript" src="../js/react.development.js"></script>
<!--引入reactdom,用于支持reavt操作dom--><script type="text/javascript" src="../js/react-dom.development.js"></script>
<!--    引入babel,用于将jsx转化为js--><script type="text/javascript" src="../js/babel.min.js"></script><script type="text/babel"> //创建组件class Login extends React.Component {handleSubmit=()=> {event.preventDefault() //阻止表单提交const {username,password} = thisalert(`用户名:${username.value}密码:${password.value}`)}render (){return(<form action="http://www.baidu.com" onSubmit={this.handleSubmit}>用户名:<input ref={c=>this.username=c} type="text" name="username"/> 密码:<input ref={c=>this.password=c} type="password" name="password"/> <button>登录</button></form>)}}ReactDOM.render(<Login/>,document.getElementById('test'))</script>
</body>

拓展:什么是event.target

简单解释:event.target是发生事件的元素或触发事件的元素

代码展示

            //保存到密码到状态中savePassword=(event)=> {console.log(event.target.value);//此时当密码产生或者发生变换即可打印出密码的值this.setState({password:event.target.value})}render (){return(<form  onSubmit={this.handleSubmit}>用户名:<input onChange={this.saveUsername} type="text" name="username"/> 密码:<input onChange={this.savePassword}  type="password" name="password"/> <button>登录</button></form>)}

React 受控组件和非受控组件(总结)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. jquery格式化时间
  2. Java正則表達式入门
  3. Java比较同一map是否相同_Java 中HashTable、HashMap、TreeMap三者区别,以及自定义对象是否相同比较,自定义排序等...
  4. UNIX网络编程——客户/服务器程序设计示范(一)
  5. mysql语法6_全面接触SQL语法(6)_mysql
  6. sql数据类型转换oracle,ORACLE SQL数据类型转换
  7. 山东栋梁机器人比赛_谁是最强“移动机器人”?来深技师这场全国大赛一决高下!...
  8. 面试官系统精讲Java源码及大厂真题 - 36 从容不迫:重写锁的设计结构和细节
  9. 【UE4+Vive】学习笔记1
  10. 整型索引查询mysql是不是快点_图解Mysql索引的数据结构!看不懂你来找我
  11. KDD18 DIN Deep Interest Network for Click-Through Rate Prediction
  12. 操作系统课程设计报告(文件系统)
  13. java中UUID类生成32位随机数(附加 6 位随机数)
  14. Mysql开启局域网连接
  15. Linux系统备份与还原-Clonezilla
  16. 揭秘,两个大西瓜竟然能合成它...
  17. WSA系列API函数
  18. 如何让安卓手机访问内网服务器?
  19. 网络设置巨形帧_修改网卡配置连接千兆网络的详细步骤
  20. RxJava 源码解析 —— Observable#defer(...)

热门文章

  1. linux scp 学习笔记
  2. 添加notepad为文件默认打开方式
  3. [Android4.4.3] Nubia Z5S Mokee4.4.3 RC2.0 by syhost
  4. 漫画家Tango: 2023,兔子要来了(下)
  5. 雨林木风 Ghost Win7 SP1 装机版 2013.04
  6. 使用浏览器开发工具测试网站可访问性的七种方法
  7. 请问在C++中clrscr,textbackground,textmode,textcolor这些函数有什么用?如何用?它们被包含在哪个头文件中?...
  8. 游戏制作之路(55)模拟风
  9. Linux 2.6 调度系统分析
  10. 零基础都可以看懂的服务器搭建