react表单-受控

react - 表单组件

受控组件

表单项中的值(value/checked)受到类组件state中数据来控制,同时还需要绑定一个onChange事件来完成对state中数据的修改

import React, { Component } from 'react';class AppInput extends Component {// 设置受控组件state = {userName: '',passWord: '',userName2: '',passWord2: ''}changeName = event => {this.setState({userName: event.target.value.trim()})}changePassword = event => {this.setState({passWord: event.target.value.trim()})}clickHandler = () => {console.log(this.state)}setValue = event => {this.setState({[event.target.name]: event.target.value.trim()})}render() {const { userName, passWord, userName2, passWord2 } = this.statereturn (<div><label >账号:<input type="text" value={userName} onChange={this.changeName} /></label><br /><label >密码:<input type="passWord" value={passWord} onChange={this.changePassword} /></label><br /><button onClick={this.clickHandler}>点击进入</button><div>{/* 为了简化代码还可以使用对象签名来整合onchange事件 */}<label htmlFor="">账号:<input type="text" name='userName2' value={userName2} onChange={this.setValue} /></label><br /><label htmlFor="">密码:<input type="passWord" value={passWord2} name='passWord2' onChange={this.setValue} /></label><br /><button onClick={this.clickHandler}>点击进入</button></div></div>);}
}export default AppInput;

为了体现react的灵活性,和方便组件拆分,还可以用一种高级写法

import React, { Component } from 'react';const formState = _this => {return {userName: {value: '',onChange: event => _this.setState({// 下面是对state中的userName进行更新,展开获取所有的值,在修改更新后的valueuserName: { ..._this.state.userName, value: event.target.value }})},passWord: {value: '',onChange: event => _this.setState(state => ({// passWord : {..._this.state.passWord , value : event.target.value}passWord: Object.assign({}, state.passWord, { value: event.target.value.trim() })}))}}
}
class AppInput02 extends Component {state = {// userName : {//     value : '',//     onChange : event => this.setState({//         // 下面是对state中的userName进行更新,展开获取所有的值,在修改更新后的value//         userName : {...this.state.userName , value : event.target.value}//     })// },// passWord : {//     value : '',//     onChange : event => this.setState({//         passWord : {...this.state.passWord , value : event.target.value}//     })// }//这样写就是为了方便将代码提取...formState(this)}clickhandler = () => {console.log(this.state)}render() {const { userName, passWord } = this.statereturn (<div><label >账号:<input type="text" {...userName} /></label><label >密码:<input type="passWord" {...passWord} /></label><button onClick={this.clickhandler}>点击进入</button></div>);}
}export default AppInput02;

案例: 全选按钮

import React, { Component } from 'react';class AppInput03 extends Component {state = {option: ['html', 'css', 'js', 'vue', 'react'],selection: [],selectAll : false}selection = e=> {console.log(e.target.value , e.target.checked)let value = e.target.value// 通过给单选框绑定一个value,在改变的时候通过这个值判断改变的是哪一个input ,并将选中与否的结果用是否选中数组中是够存有值来相关联if(e.target.checked){this.state.selection.push(value)this.state.selectAll = this.state.selection === this.state.option}else{this.state.selection = this.state.selection.filter(itm => itm !== value)// this.state.selectAll = this.state.selection === this.state.optionthis.state.selectAll = false}// 别忘了渲染// this.setState({})this.forceUpdate()}clickHandler =()=> {console.log(this.state)}// 控制是否全选,实际上就是selection数组中是否包含了全部的option数组选项selectAll = (e)=>{this.state.selectAll = e.target.checkedif(e.target.checked){this.state.selection = this.state.option}else{this.state.selection = []}this.forceUpdate()}render() {const { option, selection ,selectAll } = this.statereturn (<div><label >全选:<input type="checkbox"  checked={selectAll} onChange={this.selectAll}/></label><div><ul>{/* 在使用state中结构出来的值时,一定要加{} , 为啥老是忘记*/}{option.map((itm , index) => (<li key={index}>{/* 单选多选框中决定表单是否是受控组件的属性是 checked , */}<input type="checkbox" value={itm} checked={selection.includes(itm)} onChange={this.selection}/><span>{itm}</span></li>))}</ul></div><button onClick={this.clickHandler}>查看数据</button></div>);}
}export default AppInput03;

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

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

相关文章

基于ssm应急资源管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本应急资源管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

排序算法之七:归并排序(递归)

基本思想 基本思想&#xff1a; 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1…

C++:this指针

目录 前言 成员函数返回this指向的对象本身时&#xff0c;为什是返回引用类型&#xff1f; 成员函数返回this对象本身时&#xff0c;内部通常会通过拷贝构造函数来创建一个临时对象&#xff1f; 总结 前言 c通过提供特殊的对象指针&#xff0c;this指针 指向被调用的成员函…

openssl 常用命令 pkcs12

openssl pkcs12 openssl pkcs12 官方文档 1. 描述 The pkcs12 command allows PKCS#12 files (sometimes referred to as PFX files) to be created and parsed. PKCS#12 files are used by several programs including Netscape, MSIE and MS Outlook. pkcs12 命令是用来创…

Nodejs 第二十二章(脚手架)

编写自己的脚手架 那什么是脚手架&#xff1f; 例如:vue-cli Angular CLI Create React App 编写自己的脚手架是指创建一个定制化的工具&#xff0c;用于快速生成项目的基础结构和代码文件&#xff0c;以及提供一些常用的命令和功能。通过编写自己的脚手架&#xff0c;你可以…

Linux和Windows环境下如何使用gitee?

1. Linux 1.1 创建远程仓库 1.2 安装git sudo yum install -y git 1.3 克隆远程仓库到本地 git clone 地址 1.4 将文件添加到git的暂存区&#xff08;git三板斧之add&#xff09; git add 文件名 # 将指定文件添加到git的暂存区 git add . # 添加新文件和修改过的…

深入理解HTTP状态码及其在Web开发中的应用

在Web开发中&#xff0c;我们经常需要与服务器进行交互&#xff0c;以获取或发送数据。为了实现这一目标&#xff0c;我们使用HTTP协议。HTTP协议是一种无状态的、应用层的协议&#xff0c;它定义了客户端和服务器之间的通信方式。在HTTP协议中&#xff0c;有五种常用的HTTP状态…

Python高级算法——动态规划

Python中的动态规划&#xff1a;高级算法解析 动态规划是一种解决多阶段决策问题的数学方法&#xff0c;常用于优化问题。它通过将问题分解为子问题&#xff0c;并在解决这些子问题的基础上构建全局最优解。在本文中&#xff0c;我们将深入讲解Python中的动态规划&#xff0c;…

vs2017+qt5.14.2遇到的问题

1、在安装qt插件后&#xff0c;导入pro文件时&#xff0c;报 msvc-version.conf loaded but QMAKE_MSC_VER isn’t set 修改E:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\msvc-version.conf文件中添加

RabbitMQ学习笔记10 综合实战 实现新商家规定时间内上架商品检查

配置文件&#xff1a; 记住添加这个。 加上这段代码&#xff0c;可以自动创建队列和交换机以及绑定关系。 我们看到了我们创建的死信交换机和普通队列。 我们可以看到我们队列下面绑定的交换机。 我们创建一个controller包进行测试: 启动&#xff1a; 过一段时间会变成死信队列…

elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理

一&#xff0c; 前言 本文主要内容是通过elasticsearch的api来进行一些集群的管理和信息查询工作&#xff0c;以及elasticsearch用户的增删改查和密码的重设以及重置如何操作 接上文&#xff1a;elasticsearch|大数据|elasticsearch低版本集群的部署安装和安全增强---密码设…

SSM与SpringBoot面试题总结

什么是spring&#xff1f;谈谈你对IOC和AOP的理解。 Spring:是一个企业级java应用框架&#xff0c;他的作用主要是简化软件的开发以及配置过程&#xff0c;简化项目部署环境。 Spring的优点: 1、Spring低侵入设计&#xff0c;对业务代码的污染非常低。 2、Spring的DI机制将…

FPGA设计时序约束十一、others类约束之Set_Maximum_Time_Borrow

目录 一、序言 二、Set Maximum Time Borrow 2.1 基本概念 2.2 设置界面 2.3 命令语法 2.4 命令示例 三、参考资料 一、序言 在Vivado的时序约束窗口中&#xff0c;存在一类特殊的约束&#xff0c;划分在others目录下&#xff0c;可用于设置忽略或修改默认的时序路径分析…

IntelliJ IDEA开启git版本控制的简单教程

这篇文章想要分享一下怎么在IntelliJ IDEA开启版本控制&#xff0c;博主使用的是gitee&#xff0c;首先需要安装git&#xff0c;关于git的安装这里就不介绍了&#xff0c;很简单。 目录 创建git仓库 创建项目 开启版本控制 拉取项目 创建git仓库 首先&#xff0c;需要登录…

《Linux中lsof的神奇探秘:打开文件的魔法与更多相似利器》

前言 在Linux的世界里&#xff0c;lsof&#xff08;List Open Files&#xff09;是一个强大的工具&#xff0c;它能帮助我们轻松查看系统上打开的文件及网络连接。然而&#xff0c;除了lsof之外&#xff0c;还有一些与它功能相似且同样强大的命令等待着我们去发现。本文将引领…

MATLAB | 官方举办的动图绘制大赛 | 第四周(收官周)赛情回顾

MATHWORKS官方举办的迷你黑客大赛第三期(MATLAB Flipbook Mini Hack)圆满结束&#xff0c;虽然我的水平和很多大佬还有比较大的差距&#xff0c;但所有奖也算是拿满了&#xff1a; 专家评选前三名&#xff0c;以及投票榜前十&#xff1a;~ 每周的阶段性获奖者&#xff1a; 下面…

【Python】手把手教你用tkinter设计图书管理登录UI界面(三)

上一篇&#xff1a;【Python】手把手教你用tkinter设计图书管理登录UI界面&#xff08;二&#xff09;-CSDN博客 下一篇&#xff1a; 紧接上一篇文章&#xff0c;继续完善项目功能&#xff1a;用户登录。由于老王的注册部分有亿点点复杂&#xff0c;还没完成&#xff0c;但是…

ngixn 准备

确认yum可用&#xff0c;确认防火墙&#xff0c;确认SELinux 一项安装 yum -y install gcc make automake pcre-devel zlib zlib-devel openssl openssl-devel参数&#xff1a; gcc&#xff1a;编译依赖gcc环境 pcre&#xff1a;PCRE(Perl Compatible Regular Expressions)是一…

鸿蒙OS应用开发的开发环境

鸿蒙OS应用开发的开发环境 鸿蒙系统发展越来越快&#xff0c;已经开始走进千家万户&#xff0c;从手机到电视机&#xff0c;再到汽车&#xff0c;以后各种手表、智能设备等等。这已经是一个广泛应用的操作系统&#xff0c;也是跟大家生活密切相关的操作系统。要想在这个平台上…

Git命令---查看远程仓库

介绍 使用git命令查看绑定的远程仓库。 命令 git remote -v