日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

react 项目实战(三)表单验证

發布時間:2024/4/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 react 项目实战(三)表单验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們需要記錄每一個字段當前的有效狀態,有效時隱藏錯誤信息,無效時顯示錯誤信息

而這個有效/無效,可以在表單值改變的時候進行判斷。

我們對/src/pages/UserAdd.js進行修改:

首先修改了state的結構,把每個表單的值都放到了一個form字段中,方便統一管理;然后每個表單的值都變為了一個包含valid和value還有error字段的對象,valid表示該值的有效狀態,value表示該表單具體的值,error表示錯誤提示信息:

... constructor () {super();this.state = {form: {name: {valid: false,value: '',error: ''},age: {valid: false,value: 0,error: ''},gender: {valid: false,value: '',error: ''}}}; } ...

handleValueChange方法中,根據參數field獲取state中對應表單的對象,然后根據新的值value判斷新的值是否有效,將新的值和新的有效狀態更新到state里。

... handleValueChange (field, value, type = 'string') {if (type === 'number') {value = +value;}const {form} = this.state;const newFieldObj = {value, valid: true, error: ''};switch (field) {case 'name': {if (value.length >= 5) {newFieldObj.error = '用戶名最多4個字符';newFieldObj.valid = false;} else if (value.length === 0) {newFieldObj.error = '請輸入用戶名';newFieldObj.valid = false;}break;}case 'age': {if (value > 100 || value <= 0 || !value) {newFieldObj.error = '請輸入1~100之間的數字';newFieldObj.valid = false;}break;}case 'gender': {if (!value) {newFieldObj.error = '請選擇性別';newFieldObj.valid = false;}break;}default: {//}}this.setState({form: {...form,[field]: newFieldObj}}); } ...

handleSubmit方法中對每個字段的valid進行檢測,如果有一個valid為false則直接return以中斷提交操作。

... handleSubmit (e) {e.preventDefault();const {form: {name, age, gender}} = this.state;if (!name.valid || !age.valid || !gender.valid) {alert('請填寫正確的信息后重試');return;}fetch('http://localhost:3000/user', {method: 'post',body: JSON.stringify({name: name.value,age: age.value,gender: gender.value}),headers: {'Content-Type': 'application/json'}}).then((res) => res.json()).then((res) => {if (res.id) {alert('添加用戶成功');} else {alert('添加失敗');}}).catch((err) => console.error(err)); } ...

最后,也要對render方法進行更新:

render () {const {form: {name, age, gender}} = this.state;return (<div><header><h1>添加用戶</h1></header><main><form onSubmit={(e) => this.handleSubmit(e)}><label>用戶名:</label><inputtype="text"value={name.value}onChange={(e) => this.handleValueChange('name', e.target.value)}/>{!name.valid && <span>{name.error}</span>}<br/><label>年齡:</label><inputtype="number"value={age.value || ''}onChange={(e) => this.handleValueChange('age', e.target.value, 'number')}/>{!age.valid && <span>{age.error}</span>}<br/><label>性別:</label><selectvalue={gender.value}onChange={(e) => this.handleValueChange('gender', e.target.value)}><option value="">請選擇</option><option value="male">男</option><option value="female">女</option></select>{!gender.valid && <span>{gender.error}</span>}<br/><br/><input type="submit" value="提交"/></form></main></div>); }

來看一下最終效果:?

注:完整代碼 src / pages / UserAdd.js

import React from 'react';// 添加用戶組件 class UserAdd extends React.Component {// 構造器constructor(props) {super(props);// 定義初始化狀態this.state = {form: {name: {valid: false, // 有效狀態value: '', // 表單具體的值error: '' // 錯誤提示信息},age: {valid: false,value: '',error: ''},gender: {valid: false,value: '',error: ''}}};}// 輸入框改變事件handleValueChange(field, value, type='string') {// 由于表單的值都是字符串,我們可以根據傳入type為number來手動轉換value的類型為number類型if(type === 'number'){value = + value;}// 定義常量const { form } = this.state;const newFieldObj = {value, valid: true, error: ''};// 判斷switch(field){case 'name': {if(value.length >= 5){newFieldObj.error = '用戶名最多4個字符';newFieldObj.valid = false;}else if(value.length === 0){newFieldObj.error = '請輸入用戶名';newFieldObj.valid = false;}break;}case 'age': {if(value > 100 || value <= 0 || !value){newFieldObj.error = '請輸入1~100之間的數字';newFieldObj.valid = false;}break;}case 'gender': {if(!value){newFieldObj.error = '請選擇性別';newFieldObj.valid = false;}break;}default: {//}}// 設置狀態this.setState({form: {...form,[field]: newFieldObj}});}// 按鈕提交事件handleSubmit(e){// 阻止表單submit事件自動跳轉頁面的動作e.preventDefault();// 定義常量const { form: { name, age, gender }} = this.state;// 驗證if(!name.valid || !age.valid || !gender.valid){alert('請填寫正確的信息后重試');return;}// 發送請求fetch('http://localhost:8000/user', {method: 'post',// 使用fetch提交的json數據需要使用JSON.stringify轉換為字符串body: JSON.stringify({name: name.value,age: age.value,gender: gender.value}),headers: {'Content-Type': 'application/json'}})// 強制回調的數據格式為json.then((res) => res.json())// 成功的回調.then((res) => {// 當添加成功時,返回的json對象中應包含一個有效的id字段// 所以可以使用res.id來判斷添加是否成功if(res.id){alert('添加用戶成功!');}else{alert('添加用戶失敗!');}})// 失敗的回調.catch((err) => console.error(err));}render() {// 定義常量const {form: {name, age, gender}} = this.state;return (<div><header><div>添加用戶</div></header><main><form onSubmit={(e) => this.handleSubmit(e)}><label>用戶名:</label><inputtype="text"value={name.value}onChange={(e) => this.handleValueChange('name', e.target.value)} />{!name.valid && <span>{name.error}</span>}<br /><label>年齡:</label><inputtype="number"value={age.value || ''}onChange={(e) => this.handleValueChange('age', e.target.value, 'number')} />{!age.valid && <span>{age.error}</span>}<br /><label>性別:</label><selectvalue={gender.value}onChange={(e) => this.handleValueChange('gender', e.target.value)}><option value="">請選擇</option><option value="male">男</option><option value="female">女</option></select>{!gender.valid && <span>{gender.error}</span>}<br /><br /><input type="submit" value="提交" /></form></main></div>);} }export default UserAdd;

.

總結

以上是生活随笔為你收集整理的react 项目实战(三)表单验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美在线导航 | 欧洲一区二区三区四区 | 在线免费成人 | 国产精品三级在线观看无码 | 98超碰在线| 久久精品97 | 亚洲激情网 | 夜夜嗨老熟女av一区二区三区 | 五月天欧美 | 亚洲欧美日韩精品 | 亚洲成人v | 中文字幕亚洲图片 | 欧美一区二区最爽乱淫视频免费看 | 亚洲乱码日产精品bd在线观看 | 国产不卡视频在线观看 | 欧美视频免费在线观看 | 精品人妻中文无码av在线 | 狠狠操人人干 | 美女网站污 | 免费观看成人在线视频 | 国产免费成人在线视频 | 片黄在线观看 | 久久视频在线观看免费 | 日韩脚交footjobhd| 最新色网站 | 欧美黄色免费在线观看 | 91免费高清 | 海角社区在线视频播放观看 | 精品人妻人人做人人爽 | 色福利hd写真video | 午夜啪啪网 | 伊人五月天| 在线观看av一区二区 | 天天艹天天爽 | 男男车车的车车网站w98免费 | 国产色综合网 | 一本色道久久综合无码人妻 | 一个色亚洲 | 国产91av在线播放 | 中文字幕35页 | 亚洲欧美视频一区二区 | 韩国三级与黑人 | 婷婷激情五月 | 91九色精品 | 国产美女久久久久 | 免费日本在线 | 国产日产久久高清欧美一区 | 制服丝袜成人动漫 | 国产中文字幕第一页 | 成人免费在线视频观看 | 色盈盈影院 | 欧美三级一级片 | 色哟哟精品一区 | 国产亚洲女人久久久久毛片 | 亚洲免费一区视频 | 成人午夜在线免费观看 | 午夜视频在线免费看 | 国产情侣av自拍 | 黄色小视频免费网站 | 中文字字幕在线观看 | 亚洲影院中文字幕 | 欧美人与禽zozzo禽性配 | 山外人精品影院 | 国产呦小j女精品视频 | 狼人综合网| 日韩sese | 日韩欧美一区二区在线 | 亚洲人吸女人奶水 | 另类视频在线观看+1080p | 少妇av| ass精品国模裸体欣赏pics | 一区二区麻豆 | 午夜国产一区二区三区 | 国产亚洲高清视频 | 神马午夜电影一区二区三区在线观看 | 亚洲激情中文字幕 | 欧美日韩二区三区 | 亚洲欧美乱综合图片区小说区 | 成人精品视频一区二区 | 好好热视频 | 黄色一级片 | 亚洲玖玖爱 | 国产性猛交╳xxx乱大交 | 久久久久一区二区精码av少妇 | 自拍偷拍18p| 色播在线播放 | 日本在线成人 | 亚洲一区有码 | 亚洲av综合永久无码精品天堂 | 亚洲色图少妇 | 欧美一卡二卡三卡四卡 | 美女网站免费观看 | 视频一区二区三区在线观看 | 无码人妻少妇色欲av一区二区 | 大肉大捧一进一出好爽视频 | 国产一区二区三区黄 | 男女视频一区 | 亚洲欧美综合自拍 | 亚洲丁香网|