【React】表单

受控组件

本质上其实就是将表单中的控件和视图模型(状态)进行绑定,之后都是针对状态进行操作。

一个基本的受控组件

文本框,用户输入的内容会在状态中进行管理:

import React, { useState } from 'react';const ControlledComponent = () => {const [inputValue, setInputValue] = useState('');const handleChange = (event) => {setInputValue(event.target.value);};return (<div><h2>受控组件示例</h2><input type="text" value={inputValue} onChange={handleChange} placeholder="输入内容" /><p>输入的内容:{inputValue}</p></div>);
};export default ControlledComponent;

对用户输入的内容进行限制

限制了用户输入的内容:

import React, { useState } from 'react';const RestrictedInput = () => {const [inputValue, setInputValue] = useState('');const handleChange = (event) => {const value = event.target.value;// 在这个示例中,我们限制用户输入的内容为纯数字,你可以根据需要修改限制条件const regex = /^[0-9]*$/;if (regex.test(value)) {setInputValue(value);}};return (<div><h2>限制输入的受控组件示例</h2><input type="text" value={inputValue} onChange={handleChange} placeholder="只能输入数字" /><p>输入的内容:{inputValue}</p></div>);
};export default RestrictedInput;

在这个示例中,我们使用了正则表达式来限制用户输入的内容为纯数字。在

文本域

import React, { useState } from 'react';const ControlledTextarea = () => {const [textareaValue, setTextareaValue] = useState('');const handleChange = (event) => {setTextareaValue(event.target.value);};return (<div><h2>受控文本域示例</h2><textareavalue={textareaValue}onChange={handleChange}placeholder="输入内容"rows={5} // 设置文本域的行数cols={50} // 设置文本域的列数/><p>输入的内容:{textareaValue}</p></div>);
};export default ControlledTextarea;

单选与多选框

以下是单选框和多选框的受控组件示例:

import React, { useState } from 'react';const ControlledCheckbox = () => {const [isChecked, setIsChecked] = useState(false);const handleCheckboxChange = () => {setIsChecked(!isChecked);};return (<div><h2>单选框示例</h2><label><inputtype="checkbox"checked={isChecked}onChange={handleCheckboxChange}/>是否选中</label><p>选中状态:{isChecked ? '是' : '否'}</p></div>);
};const ControlledRadio = () => {const [selectedOption, setSelectedOption] = useState('option1');const handleOptionChange = (event) => {setSelectedOption(event.target.value);};return (<div><h2>单选按钮示例</h2><label><inputtype="radio"value="option1"checked={selectedOption === 'option1'}onChange={handleOptionChange}/>选项1</label><label><inputtype="radio"value="option2"checked={selectedOption === 'option2'}onChange={handleOptionChange}/>选项2</label><p>选中的选项:{selectedOption}</p></div>);
};const ControlledInputs = () => {return (<div><ControlledCheckbox /><hr /><ControlledRadio /></div>);
};export default ControlledInputs;

在这个示例中,我们分别创建了两个组件,一个是用于处理复选框的ControlledCheckbox组件,另一个是用于处理单选按钮的ControlledRadio组件。它们都使用了useState来管理状态。

下拉列表

下面是一个下拉列表的受控组件示例:

import React, { useState } from 'react';const ControlledSelect = () => {const [selectedOption, setSelectedOption] = useState('');const handleSelectChange = (event) => {setSelectedOption(event.target.value);};return (<div><h2>下拉列表示例</h2><select value={selectedOption} onChange={handleSelectChange}><option value="">请选择</option><option value="option1">选项1</option><option value="option2">选项2</option><option value="option3">选项3</option></select><p>选择的选项:{selectedOption}</p></div>);
};export default ControlledSelect;

非受控组件

在大多数情况下,react 中使用的都是受控组件。某些情况下,需要传统 dom 进行处理。需要使用非受控组件。

基本示例

非受控组件通常在不需要手动控制组件状态的情况下使用。以下是一个基本的非受控组件示例,展示了如何使用ref来访问DOM元素的值:

import React, { useRef } from 'react';const UncontrolledComponent = () => {const inputRef = useRef(null);const handleSubmit = (event) => {event.preventDefault();// 使用ref.current.value来获取输入框的值alert('输入的内容是: ' + inputRef.current.value);};return (<div><h2>非受控组件示例</h2><form onSubmit={handleSubmit}><input type="text" ref={inputRef} placeholder="输入内容" /><button type="submit">提交</button></form></div>);
};export default UncontrolledComponent;

在这个示例中,我们使用了useRef来创建一个引用inputRef,它会指向输入框的DOM元素。当表单被提交时,我们可以通过inputRef.current.value来获取输入框的值。这里并没有使用useState来存储输入框的值,因此这是一个非受控组件。

默认值

非受控组件可以在初始化时给定默认值,这可以通过在组件的defaultValue属性上设置值来实现。以下是一个示例:

import React, { useRef } from 'react';const UncontrolledComponentWithDefault = () => {const inputRef = useRef(null);const handleSubmit = (event) => {event.preventDefault();// 使用ref.current.value来获取输入框的值alert('输入的内容是: ' + inputRef.current.value);};return (<div><h2>非受控组件示例(带默认值)</h2><form onSubmit={handleSubmit}>{/* defaultValue属性用于设置输入框的默认值 而不是 value */}<input type="text" defaultValue="默认值"ref={inputRef} placeholder="输入内容" /><button type="submit">提交</button></form></div>);
};export default UncontrolledComponentWithDefault;

在这个示例中,输入框的默认值被设置为"默认值",用户可以在此基础上进行修改。当用户提交表单时,通过inputRef.current.value可以获取到输入框中的值。

文件上传

import React, { useRef } from 'react';const UncontrolledFileUpload = () => {const fileInputRef = useRef(null);const handleUpload = () => {// 使用fileInputRef.current.files来获取上传的文件列表const fileList = fileInputRef.current.files;if (fileList.length > 0) {const uploadedFile = fileList[0];alert(`已上传文件:${uploadedFile.name}`);// 在这里可以执行文件上传的操作} else {alert('请选择要上传的文件');}};return (<div><h2>非受控文件上传示例</h2><input type="file" ref={fileInputRef} accept=".jpg, .jpeg, .png, .gif" // 可选的文件类型/><button onClick={handleUpload}>上传文件</button></div>);
};export default UncontrolledFileUpload;

在这个示例中,我们使用了useRef来创建一个引用fileInputRef,它会指向文件上传输入框的DOM元素。当用户选择文件并点击上传按钮时,我们可以通过fileInputRef.current.files来获取用户选择的文件列表。然后我们可以执行文件上传的相关操作,例如显示已上传文件的名称。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习(二)

Bootloader 引导加载程序&#xff08;Bootloader&#xff09;是计算机系统中的一个重要组件&#xff0c;负责在计算机启动时加载操作系统。它通常存储在计算机的固件中&#xff0c;比如BIOS或UEFI&#xff0c;或者存储在硬盘或固态硬盘的引导分区中。引导加载程序的主要作用是引…

【rust编译错误解读】

PANIC 1cannot index into a value of type std::option::Option<&Vec<Value>> &#xff08;不能访问下标index在一个Option包裹的Vec中&#xff09; 尝试对一个 Option 类型的值进行索引操作&#xff0c;而这个 Option 可能包含一个对 Vec 的引用&#xff0c…

《Linux运维总结:Kylin V10+ARM架构CPU基于docker-compose一键离线部署redis6.2.8之容器版哨兵集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…

NLP——序列文本信息处理

序列文本信息处理是指对那些具有明确词序或结构顺序&#xff08;如句子、段落、篇章等&#xff09;的文本数据进行专门的分析和转换&#xff0c;以保留并利用其内在的时序或逻辑关系。在NLP中&#xff0c;处理序列文本信息通常涉及以下几个关键步骤&#xff1a; 分词&#xff0…

idea 设置启动项指定使用的nacos namespace

文章目录 场景如图 场景 各个研发的nacos配置要做隔离&#xff0c;这时候通常有两种方式&#xff0c; 第一种修改bootstarp.yaml文件 指定研发自己的配置&#xff0c;第二种更优雅&#xff0c;只需要修改idea启动项, 对代码没有侵入 如图 –spring.cloud.nacos.discovery.names…

揭秘英伟达Blackwell平台网络拓扑架构,解锁超算新境界

英伟达Blackwell平台网络配置详解 AI算力研究&#xff1a;英伟达B200再创算力奇迹&#xff0c;液冷、光模块持续革新 突破性的GB200 NVL72全互联架构&#xff0c;带来高性能GPU解决方案。铜缆方案有望成为未来趋势&#xff0c;提供低成本、高带宽连接。 1. Blackwell 平台网络…

时序预测 | Transformer时间序列预测 Matlab代码

文章目录 效果一览文章概述源码设计参考资料 效果一览 文章概述 1.时序预测 | Transformer时间序列预测 Matlab代码 2.单变量时间序列预测&#xff1b; 3.多指标评价&#xff0c;评价指标包括&#xff1a;R2、MAE、MBE等&#xff0c;代码质量极高&#xff1b; 4.excel数据&…

程序使用哪个寄存器是由谁决定的?

在程序中使用哪些寄存器的决定通常是由多种因素决定的&#xff0c;包括&#xff1a; 1. 编译器或汇编器 编译器&#xff1a;对于高级编程语言&#xff0c;编译器在寄存器分配中起着重要作用。编译器分析程序的代码&#xff0c;识别常用的变量和表达式&#xff0c;并将它们映射…

政企即时通讯APP:快速构建专属、安全的智慧办公解决方案

在数字化时代&#xff0c;政企单位对信息系统的依赖日益加深&#xff0c;但随之而来的信息安全隐患也不容忽视。组织内部信息系统的安全问题&#xff0c;尤其是在人员调整或离职时&#xff0c;管理员账号管理的混乱&#xff0c;以及敏感资料泄露和业务系统破坏的风险&#xff0…

文献阅读:基于电压规避的汽车CAN入侵检测(一)

论文名称&#xff1a;Evading Voltage-Based Intrusion Detection on Automotive CAN 目录 文章概述 背景 本文工作 提出新型攻击DUET 提出防御系统RAID 第一部分&#xff1a;INTRODUCTION&#xff08;介绍&#xff09; 电压破坏和DUET RAID 文章贡献 文章概述 背景…

Linux根据进程ID查看进程的文件路径

1、执行pwdx PID命令&#xff0c;用来显示进程的当前工作目录和可执行文件的路径。 2、执行ll /proc/PID/cwd或者ls -l /proc/PID/exe命令&#xff0c;也可以查看进程的路径。/proc文件系统是一个虚拟文件系统&#xff0c;它为内核和进程之间提供了一个接口。对于每个进程&…

jar包解压和重新打包

1、Windows系统上解压和重新打包jar包的命令&#xff1a; (1). 解压jar包&#xff1a; jar -xf yourJarFile.jar (2). 重新打包jar包&#xff1a; jar -cf newJarFile.jar * 2、Linux系统上解压和重新打包jar包的命令&#xff1a; (1). 解压jar包&#xff1a; unzip your…

Seal^_^【送书活动第一期】——《Vue.js+Node.js全栈开发实战(第2版)》

Seal^_^【送书活动第一期】——《Vue.jsNode.js全栈开发实战&#xff08;第2版&#xff09;》 一、参与方式二、本期推荐图书2.1 前 言2.2 作者简介2.3 图书简介2.4 本书特色2.5 编辑推荐2.6 书籍目录 三、正版购买 一、参与方式 1、关注博主的账号。 2、点赞、收藏、评论博主的…

Altair® (澳汰尔)Grid Engine® 分布式资源管理系统

Grid Engine 是可靠的分布式资源管理系统&#xff0c;用于优化数千个数据中心的工作负载和资源&#xff0c;提高性能并提高生产力和效率。 Grid Engine 可通过优化应用程序、容器和服务的吞吐量和性能&#xff0c;同时极大化本地、混合和云基础设施之间的共享计算资源&#xf…

Web3技术简介:重新定义互联网的未来

引言 在21世纪的数字时代&#xff0c;互联网已成为我们日常生活的不可或缺的一部分。然而&#xff0c;随着区块链和加密技术的快速发展&#xff0c;一个全新的互联网模型——Web3&#xff0c;正逐渐崭露头角。Web3不仅仅是技术的进步&#xff0c;它更是对传统互联网模型的挑战…

B端:再探列表页,这20个组件能让列表页功能完备,体验过关。

有很多小伙伴反馈设计列表页的时候&#xff0c;好看是好看了&#xff0c;但是用户体验不佳&#xff0c;处理数据十分不方便&#xff0c;这样好看也就失去了意义&#xff0c;贝格前端工场分析这个原因大概率是没有用好列表页的组件&#xff0c;丢三落四的情况比较多导致的&#…

spring boot获取请求参数并响应

获取请求参数并响应&#xff1a; 响应&#xff1a; 在Controller类或方法上加上ResponseBody注解&#xff0c;可以将方法返回值直接响应&#xff0c;如果返回值是实体对象或者集合&#xff0c;将转换为json格式响应。如下例&#xff1a; RestControllerResponseBodyControll…

【必收藏】史上最全 Meta Llama 3 相关网址资料

不要犹豫&#xff0c;先收藏再说&#xff0c;你肯定用得到&#xff01; ✅ 模型相关网址 Meta Llama 3 官网&#xff1a;https://llama.meta.com/llama3 Meta AI 网址&#xff1a;https://ai.meta.com/ 官网下载地址&#xff1a;https://llama.meta.com/llama-downloads Git…

JavaSE:继承 多态

继承 继承的本质 子类能够使用父类的方法和变量 使用场景&#xff1a;代码复用 在一个类中实现了一个很复杂的方法&#xff0c;给一个新类重新实现这个方法&#xff0c;我们直接继承即可 public class Student {public String sno;public void study() {System.out.printl…

Spring Boot 中Mybatis使用Like的使用方式和注意点

说明 模糊查询在项目中还是经常使用的&#xff0c;本文就简单整理Mybatis中使用Like进行模糊查询的几种写法以及一些常见的问题。 使用Springboot简单配置一下Mybatis&#xff0c;然后进行说明。Springboot集成Mybatis这里就不做介绍了&#xff0c;这里我们主要介绍一下在mybat…