当前位置: 首页 > news >正文

React学习笔记八-受控与非受控组件

此文章是本人在学习React的时候,写下的学习笔记,在此纪录和分享。此为第八篇,主要介绍非受控组件与受控组件。

目录

1.非受控组件

1.1表单提交案例

1.2案例的总结

2.受控组件

2.1受控组件案例

2.1受控案例总结


1.非受控组件

1.1表单提交案例

首先我们写一个表单,表单内是用户名和密码,我们点击登录,会弹窗显示我们输入的用户名和密码。

1.创建类Login,在render函数内写好dom结构,form表单内有两个输入框,一个按钮。

2.为form标签设置提交地址,onSubmit提交事件。为输入框设置ref。

3.在实例中写好from的提交事件handleSubmit。

class Login extends React.Component {handleSubmit = ()=>{const {username, password} = thisalert(`您输入的用户名是,${username.value},输入的密码是${password.value}`)}render() {return (<form action="http://www.atguigu.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('test1'))

写好代码后,我们看效果:点击登录按钮可以正常弹窗显示信息。

点击弹窗的确定按钮后,页面跳转到我们写好的地址,并且用户名和密码拼接到url地址后面。

 

 如此,功能都实现了,但是如果我们不想让页面进行跳转呢?比如说ajax技术,页面在不刷新的情况下,获取数据。现在的网页对用户的体验非常重视,不希望在点击页面的时候,页面频繁刷新或者跳转,所以我们这个案例,想办法把页面跳转去掉。

我们获取用户名和密码之后,点击确定,会引发表单的默认事件,跳转到action属性设置的页面。这是表单的默认事件,即使删除action属性也不能阻止这个默认事件。所以我们得使用preventDefault改写一下表单的提交事件。

代码如下:我们给事件函数传入一个参数event,因为事件源是这个表单,所以这个参数event就是表单。在函数内我们直接使用event.preventDefault()来阻止默认事件,阻止跳转页面。

handleSubmit = (event) => {event.preventDefault()const { username, password } = thisalert(`您输入的用户名是${username.value},输入的密码是${password.value}`)
}

1.2案例的总结

结合上面的案例,就已经写完了一个非受控组件。

在表单中,输入类的dom(输入框,单选,多选等),如果是现用现取,那就是非受控组件。比如说这个案例里面有表单,表单里面有两个输入框,先设置ref标识,只有在点击登录按钮触发事件函数的时候,才根据ref来获取这两个输入框里面的值。

2.受控组件

2.1受控组件案例

我们尝试改写上面那个案例,把它改成受控组件。

1.首先我们将ref去掉,不给两个输入框设定ref,使用onchange事件,onchange事件只要input框内的内容发生改变就会触发,可以实时监控输入框内容。注意react内要写成onChange。

2.然后,我们写事件函数,参数为event,就是事件源--这个输入框。我们直接将输入框的内容(event.target.value),使用setState这个api存储到state(状态)里面。

3.因为使用了state,别忘了在开始为state进行初始化。

如此我们就完成了案例的改写,输入框的值只要发生变化,就会把新的值存储到state,保证state内的值与输入框联动,实时的更新。这就不再是现用现取。

代码如下:

 class Login extends React.Component {//状态初始化state = {username:'',//用户名password:''//密码}//保存用户名到状态中saveUsername = (event)=>{this.setState({username:event.target.value})}//保存密码到状态中savePassword = (event)=>{this.setState({password:event.target.value})}//表单提交的回调handleSubmit = (event) => {event.preventDefault()const {username,password} = this.statealert(`您输入的用户名是${username},输入的密码是${password}`)}render() {return (<form action="http://www.atguigu.com" 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('test1'))

效果如下:在react的官方开发者工具内看。

 

 

2.1受控案例总结

这样的,就是受控组件。这样的输入类的dom,如input框,随着用户的输入,就可以把数据实时的维护到状态(state)中去,等到你使用就可以直接从状态里面拿,这就是属于受控组件。

接触过vue的伙伴们,这个受控组件,是不是非常像vue中的双向数据绑定,v-model,但react里面没有实现数据双向绑定,所以在这个地方得使用onchange。

受控组件内不用ref,符合react官网对开发者们要求少使用ref的规范,所以使用受控组件是比较好的。非受控组件每个输入类dom都得加一个ref标识,麻烦一点,但也无伤大雅。

相关文章:

React学习笔记八-受控与非受控组件

此文章是本人在学习React的时候&#xff0c;写下的学习笔记&#xff0c;在此纪录和分享。此为第八篇&#xff0c;主要介绍非受控组件与受控组件。 目录 1.非受控组件 1.1表单提交案例 1.2案例的总结 2.受控组件 2.1受控组件案例 2.1受控案例总结 1.非受控组件 1.1表单提…...

gcc编译

一、GCC简介 GCC&#xff08;GNU Compiler Collection&#xff09;是 GNU 工具链的主要组成部分&#xff0c;是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件&#xff0c;由 Richard Stallman 于 1985 年开始开发。 GCC 原名为 GNU C语言编译器&#xff0c;因为它原本…...

华为云服务器租用费用及CPU性能(1核2G/2核4G/4核8G)

华为云HECS云服务器即云耀云服务器&#xff0c;类似于阿里云和腾讯云的轻量应用服务器&#xff0c;HECS云服务器1核2G配置39.02元一年、2核4G配置99元一年、4核8G配置69.94元3个月&#xff0c;华为云百科分享华为云HECS云服务器租用费用及CPU性能详解&#xff1a; 目录 华为云…...

Redis---事务管道

目录 一、Redis的事务是什么&#xff1f; 1.1 Redis和关系型数据库事务的区别 二、怎么玩Redis事务&#xff1f; 2.1 正常执行&#xff1a; 2.2 放弃事务 2.3 全体连坐 2.4 冤头债主 2.5 watch监控 三、管道 3.1 为什么会引入管道这个概念呢&#xff1f;我们首先来看一…...

Python的内置数据类型(通过故事来学习)

有一天&#xff0c;小李在学习Python语言时&#xff0c;听到了一个关于内置数据类型的故事。 Python内置了很多数据类型&#xff0c;比如整数、浮点数、字符串、布尔值等等。这些数据类型可以帮助我们更方便地处理数据&#xff0c;提高代码的效率。 小李很好奇&#xff0c;就…...

继瑞吉外卖后的又一个项目——SpringBoot+Vue的前后端博客系统

文章目录 博客系统项目介绍前言项目演示前台演示后台演示 组织结构后端组织结构前端组织结构 技术选型前端技术后端技术架构图系统架构图业务架构图 模块介绍前端模块后端模块 环境搭建开发工具开发环境项目运行 未完待续结语 博客系统项目介绍 前言 本项目已开源在Gitee 后端…...

2023暑期实习历程总结

一.前言 Hello 大家好久不见&#xff0c;已经三个月左右没有更新了&#xff0c;那我这三个月在干什么呢&#xff1f;自2023年3月中旬开始到现在五月底这期间接近三个月的时间里&#xff0c;我一直在进行2023暑期实习的投递和面试。这期间投递了包括各大中厂&#xff08;阿里&am…...

UART-STM32

UART-STM32 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 第一步,开启时钟,把需要用的USART和GPIO的时钟打开 第二步,GPIO初始化,把TX配置成复用输出,RX配置成输入 第三步,配置USART,直接使…...

jetson nano csi摄像头 tensorrt 运行yolov8检测

jetson nano csi摄像头 tensorrt 运行yolov8检测 基于原始onnx模型的tensorrt预测1. 在本地电脑训练环境下将onnx模型导出yolov8 导出onnx 模型2. 在jetson nano下 转换到tensorrt模型配置好环境后 使用trtexec 生成engine3. 使用python3 tensorrt 读取csi摄像头进行预测修改on…...

提升国际品牌影响力:小企业海外网红营销实战指南

在当今数字化时代&#xff0c;小企业们越来越意识到海外市场的巨大潜力。与此同时&#xff0c;海外网红的崛起也为小企业提供了一个独特的机会&#xff0c;通过与他们合作&#xff0c;迅速拓展国际市场并吸引更多目标受众的关注。然而&#xff0c;对于许多小企业来说&#xff0…...

从零开始的力扣刷题记录-第三十九天

力扣每日四题 228. 汇总区间-简单1431. 拥有最多糖果的孩子-简单637. 二叉树的层平均值-简单49. 字母异位词分组-中等总结 228. 汇总区间-简单 题目描述&#xff1a; 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也…...

PDPS教程:机器人工作站导出为JT格式文件操作方法

目录 功能简介 功能注意事项 导出JT格式文件操作 导出JT格式文件查看 功能简介 PDPS软件不仅能够从外部导入JT格式的模型文件&#xff0c;还能够将创建好的机器人工作站/生产线导出为JT格式的模型文件。这个能够导出JT格式文件的功能就是“Export JT”命令。 使用“Expor…...

【面试】为什么Mysql用B+树做索引而不用B-树或红黑树

文章目录 前言一、B树只有叶节点存放数据&#xff0c;其余节点用来索引&#xff0c;而B-树是每个索引节点都会有Data域。二、那么Mysql如何衡量查询效率呢&#xff1f;三、B树相对于红黑树的区别 前言 原因如下&#xff1a; B树能显著减少IO次数&#xff0c;提高效率B树的查询…...

教你如何选择真正有用的防关联指纹浏览器

从事亚马逊、eBay、Shopify等电商平台的卖家都知道&#xff0c;如果我们需要在这些平台上经营多个店铺&#xff0c;需要使用多个账号为店铺进行评价&#xff0c;在Facebook和Instagram上做SEO和广告&#xff0c;通常也需要使用一个防关联指纹浏览器。 防关联指纹浏览器主要解决…...

某程序员哀叹:月薪四五万,却每天极度焦虑痛苦,已有生理性不适,又不敢裸辞,该怎么办?

高薪能买来快乐吗&#xff1f; 来看看这位程序员的哀叹&#xff1a; 实在是扛不住了&#xff0c;每天都在极度焦虑和痛苦中度过&#xff0c;早上起来要挣扎着做心理建设去上班&#xff0c;已经产生生理性的头晕恶心食欲不振。有工作本身的原因&#xff0c;更多是自己心态的问…...

不愧是腾讯出来的,太厉害了...

前段时间公司缺人&#xff0c;也面了许多测试&#xff0c;一开始瞄准的就是中级水准&#xff0c;当然也没指望能来大牛&#xff0c;提供的薪资在15-20k这个范围&#xff0c;来面试的人有很多&#xff0c;但是平均水平真的让人很失望。看了简历很多上面都是写有4年工作经验&…...

2023年上半年系统集成项目管理工程师上午真题及答案解析

1.在( )领域我国远末达到世界先进水平&#xff0c;需要发挥新型国家体制优势&#xff0c;集中政府和市场两方面的力量全力发展。 A.卫星导航 B.航天 C.集成电路 D.高铁 2.ChatGPT 于2022年11月30日发布&#xff0c;他是人工智能驱动( )。 …...

psd文件丢失了怎么恢复?分享原因及对应恢复方法

PSD文件在设计行业中非常重要。但是&#xff0c;不幸的是&#xff0c;有时这些文件可能会因多种原因而丢失。那么在未备份PSD文件的情况下&#xff0c;PSD文件丢失了怎么恢复呢&#xff1f;如果您遇到了这种问题&#xff0c;不要惊慌&#xff0c;在本篇文章中&#xff0c;我们将…...

【Netty】 工作原理详解(十一)

文章目录 前言一、Netty 模型二、代码示例2.1、引入Maven依赖2.2、服务端的管道处理器2.3、服务端主程序2.4、客户端管道处理器2.5、客户端主程序2.6、测试运行 总结 前言 回顾Netty系列文章&#xff1a; Netty 概述&#xff08;一&#xff09;Netty 架构设计&#xff08;二&…...

SQL面试必备:100道高频考题解析

前言 在众多IT职场中&#xff0c;SQL技术一直是一个非常重要的技能点。如果你正在准备SQL相关的面试&#xff0c;那么这份“SQL面试 100 问”绝对是你不能错过的宝藏&#xff01; 这份清单涵盖了100道高频考题&#xff0c;从基础知识到复杂应用都有所涉及&#xff0c;帮助你全…...

Unity XLua调试失败原因与sourceMapPathOverrides终极配置

1. 这不是“配个插件就能跑”的事&#xff1a;为什么90%的UnityXLua调试配置会卡在“找不到源码”上EmmyLua VSCode 调试 XLua&#xff0c;这个组合在Unity Lua热更项目里几乎是事实标准。但你有没有遇到过这样的场景&#xff1a;断点明明打在Lua文件里&#xff0c;VSCode也显…...

终极AMD Ryzen调试工具:SMUDebugTool完全使用指南

终极AMD Ryzen调试工具&#xff1a;SMUDebugTool完全使用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…...

索尼360 Reality Audio发展受阻,苹果携手杜比让空间音频成主流

索尼的行动与失察索尼在市场创新方面思路正确&#xff0c;利用个人音频业务融入技术&#xff0c;争取平台采用&#xff0c;吸引音乐家录制专辑&#xff0c;授权音频制造商。但没料到自己不会成为沉浸式音频未来的关键参与者&#xff0c;失误只因不是苹果。空间音频如何定义2010…...

当大模型遇见嵌入式MCU:RISC-V+TinyML+Agent状态机的超低功耗智能体设计(STM32H7实测待机功耗仅2.1mW)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;AI Agent边缘计算应用 AI Agent在边缘计算场景中正从“云端智能”转向“端侧自治”&#xff0c;通过轻量化模型、实时推理与本地决策能力&#xff0c;显著降低延迟、带宽依赖与数据隐私风险。典型应用包括工业…...

为ClaudeCode配置Taotoken作为稳定后备API服务避免中断

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为ClaudeCode配置Taotoken作为稳定后备API服务避免中断 基础教程类&#xff0c;针对担心Claude Code服务不稳定或配额不足的用户&a…...

AI Agent游戏测试革命:自动生成10万+边界用例,覆盖率提升3.2倍——附可运行Python测试Agent源码

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI Agent游戏行业应用全景图 AI Agent 正在重塑游戏开发、运营与玩家体验的全生命周期。从智能NPC的行为建模&#xff0c;到自动化测试与关卡生成&#xff0c;再到实时个性化内容推荐与反作弊决策&…...

Agent怎样做到在信创环境全栈兼容?2026企业级智能体信创适配技术全解析

进入2026年&#xff0c;随着信创&#xff08;信息技术应用创新&#xff09;产业进入深水区&#xff0c;企业数字化转型已不再仅仅是简单的“去IOE”或系统迁移&#xff0c;而是演变为以AI Agent&#xff08;智能体&#xff09;为核心的新型生产力重构。在这一背景下&#xff0c…...

别再只盯着人脸了!手把手教你用Python复现2023年最新的多模态情绪识别模型COGMEN

别再只盯着人脸了&#xff01;手把手教你用Python复现2023年最新的多模态情绪识别模型COGMEN 情绪识别技术正在经历从单一模态到多模态融合的范式转变。传统基于面部表情的分析方法往往受限于光照条件、遮挡问题以及文化差异带来的表达偏差。2023年发布的COGMEN模型通过引入图…...

为小型创业团队搭建经济可控的大模型应用开发平台

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为小型创业团队搭建经济可控的大模型应用开发平台 对于资源有限的创业团队而言&#xff0c;在拥抱大模型技术的同时&#xff0c;必…...

Jupyter C内核:在Notebook中实现C语言交互式编程的完整指南

Jupyter C内核&#xff1a;在Notebook中实现C语言交互式编程的完整指南 【免费下载链接】jupyter-c-kernel Minimal Jupyter C kernel 项目地址: https://gitcode.com/gh_mirrors/ju/jupyter-c-kernel Jupyter C内核是一个开源项目&#xff0c;为Jupyter Notebook提供完…...