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.pswp.cn/news/212612.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212612.shtml
英文地址,請注明出處:http://en.pswp.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