• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    React中使用async validator進行表單驗證的實例代碼

    來源:懂視網 責編:小采 時間:2020-11-27 22:09:37
    文檔

    React中使用async validator進行表單驗證的實例代碼

    React中使用async validator進行表單驗證的實例代碼:react中進行表單驗證毫無疑問是繁瑣的,尤其對于動態添加或刪除的表單,其驗證邏輯更為復雜, 目前UI框架使用material ui ,但其表單處理不太理想,而后研究了一下另一個UI 框架 ant design, 其對表單的處理大大方便了邏輯的編寫, 它使用async-valid
    推薦度:
    導讀React中使用async validator進行表單驗證的實例代碼:react中進行表單驗證毫無疑問是繁瑣的,尤其對于動態添加或刪除的表單,其驗證邏輯更為復雜, 目前UI框架使用material ui ,但其表單處理不太理想,而后研究了一下另一個UI 框架 ant design, 其對表單的處理大大方便了邏輯的編寫, 它使用async-valid

    react中進行表單驗證毫無疑問是繁瑣的,尤其對于動態添加或刪除的表單,其驗證邏輯更為復雜, 目前UI框架使用material ui ,但其表單處理不太理想,而后研究了一下另一個UI 框架 ant design, 其對表單的處理大大方便了邏輯的編寫, 它使用async-validator處理驗證邏輯

    目前更換框架毫無疑問是不現實的,于是就想直接引入async-validator,下面描述一個簡單的使用,具體信息可以去github上查看

    validate.js

    import Schema from 'async-validator';
    /*
    * @params form: {
    * descriptor: 驗證規則
    * source: 待驗證字段
    * callback: 異步驗證回調函數
    * }
    *
    * @return errInfo {
    * isAllValid: 驗證是否通過
     * errors: 驗證失敗的字段信息
    * }
    * 不管驗證結果成功還是失敗,都會將結果信息寫入errors中,方便調用者直接通過數組下標方式獲取驗證結果信息
    * */
    function validate (form) {
     let errInfo = {};
     let errStatus = [];
     let descriptor = form.descriptor;
     let validator = new Schema(descriptor);
     validator.validate(form.source, {
     firstFields: true // 如果一個字段對應多個驗證規則, 只顯示驗證失敗的第一個規則信息,并不再進行后續規則的驗證
     }, (errors, fields) => {
     if (errors) {
     /* 如需異步驗證需要傳入回調函數callback */
     errors.forEach(item => {
     errStatus.push(item.message.errStatus);
     });
     errInfo.errors = errors;
     errInfo.isAllValid = !errStatus.includes(true);
     form.callback && form.callback(errInfo);
     }
     });
     return errInfo;
    }export default validate;

    Form.js

    /**
     * Created by wxw on 18-4-26.
     */
    import React from 'react';
    import {inject} from 'mobx-react';
    import { withStyles } from 'material-ui/styles';
    import validate from '../utils/validate';
    import {formTest2} from '../utils/validateRules';
    import Input, { InputLabel } from 'material-ui/Input';
    import { FormControl, FormHelperText } from 'material-ui/Form';
    import { MenuItem } from 'material-ui/Menu';
    import Select from 'material-ui/Select';
    import Button from 'material-ui/Button';
    const styles = theme => ({
     container: {
     display: 'flex',
     flexWrap: 'wrap',
     },
     formControl: {
     margin: theme.spacing.unit,
     },
     button: {
     margin: theme.spacing.unit,
     color: '#fff'
     },
    });
    @inject('rootStore')
    @withStyles(styles)
    class FormTest2 extends React.Component {
     state = {
     name: {
     value: '',
     errStatus: false,
     errMsg: '請輸入name'
     },
     age: {
     value: '',
     errStatus: false,
     errMsg: '請選擇age'
     }
     };
     handleChange =(field) => event => {
     if (field === 'name') {
     this.setState({ name: Object.assign(this.state.name, {value: event.target.value}) });
     } else if (field === 'age') {
     this.setState({ age: Object.assign(this.state.age, {value: event.target.value}) });
     }
     };
     handleCheck = (field) => () => {
     if (field === 'name') {
     let errInfo = validate({
     descriptor: formTest2,
     source: {
     name: this.state.name.value,
     }
     });
     this.setState({ name: errInfo.errors[0].message});
     } else if (field === 'age') {
     let errInfo = validate({
     descriptor: formTest2,
     source: {
     age: this.state.age.value,
     }
     });
     this.setState({ age: errInfo.errors[1].message });
     }
     };
     handleSubmit = () => {
     let {name, age} = this.state;
     let errInfo = validate({
     descriptor: formTest2,
     source: {
     name: name.value,
     age: age.value
     }
     });
     errInfo.errors.forEach(item => {
     this.setState({
     [item.field]: item.message
     });
     });
     if (errInfo.isAllValid) {
     console.log('驗證成功');
     } else {
     console.log('驗證失敗');
     }
     };
     render () {
     const { classes } = this.props;
     const {name, age} = this.state;
     return (
     <div className="form2">
     <FormControl className={classes.formControl} error={name.errStatus}>
     <InputLabel htmlFor="name-simple">Name</InputLabel>
     <Input id="name-simple" value={name.value} onChange={this.handleChange('name')} placeholder="placeholder" onBlur={this.handleCheck('name')} />
     <FormHelperText id="name-simple">{name.errMsg}</FormHelperText>
     </FormControl>
     <FormControl className={classes.formControl} error={age.errStatus}>
     <InputLabel htmlFor="age-simple">Age</InputLabel>
     <Select
     value={age.value}
     onChange={this.handleChange('age')}
     onBlur={this.handleCheck('age')}
     inputProps={{
     name: 'age',
     id: 'age-simple',
     }}
     >
     <MenuItem value={10}>Ten</MenuItem>
     <MenuItem value={20}>Twenty</MenuItem>
     <MenuItem value={30}>Thirty</MenuItem>
     </Select>
     <FormHelperText id="age-simple">{age.errMsg}</FormHelperText>
     </FormControl>
     <Button variant="raised" color="primary" className={classes.button} onClick={this.handleSubmit}>
     提交
     </Button>
     </div>
     )
     }
    }

    export default FormTest2;

    validateRules.js
    /**
     * Created by wxw on 18-4-26.
     */
    export const formTest2 = {
     name: {
     validator(rule, value, callback, source, options) {
     /* callback必須執行一次,帶參數為錯誤信息,不帶參數為正確 */
     if (value) {
     callback({
     errMsg: "請輸入name",
     value,
     errStatus: false
     });
     } else {
     callback({
     errMsg: "name不能為空",
     value,
     errStatus: true
     });
     }
     }
     },
     age: {
     validator(rule, value, callback, source, options) {
     /* callback必須執行一次,帶參數為錯誤信息,不帶參數為正確 */
     if (value) {
     callback({
     errMsg: "請選擇age",
     value,
     errStatus: false
     });
     } else {
     callback({
     errMsg: "必選項",
     value,
     errStatus: true
     });
     }
     }
     },
    };

    綜上為一個小demo,在此基礎上可以進行更深層次的封裝以便使用。

    總結

    以上所述是小編給大家介紹的React中使用async validator進行表單驗證的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    React中使用async validator進行表單驗證的實例代碼

    React中使用async validator進行表單驗證的實例代碼:react中進行表單驗證毫無疑問是繁瑣的,尤其對于動態添加或刪除的表單,其驗證邏輯更為復雜, 目前UI框架使用material ui ,但其表單處理不太理想,而后研究了一下另一個UI 框架 ant design, 其對表單的處理大大方便了邏輯的編寫, 它使用async-valid
    推薦度:
    標簽: 代碼 驗證的 async
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 视频二区国产精品职场同事| 久久人人超碰精品CAOPOREN| 国产精品JIZZ在线观看老狼| 久久影院综合精品| 精品国产香蕉伊思人在线在线亚洲一区二区 | 亚洲国产精品久久电影欧美 | 成人国产一区二区三区精品| 国产成人精品无码播放| 亚洲麻豆精品国偷自产在线91| 国产亚洲精品无码专区| 一区二区三区国产精品| 国产精品久久久久久久久鸭| 欧美性videos高清精品| 亚洲精品国产精品乱码不卡√| 日韩欧美一区二区三区中文精品 | 久热精品人妻视频| 国产精品无码久久四虎| 99热这里只有精品6国产免费| 精品一区二区久久久久久久网站| 国产精品高清一区二区三区| 亚洲国产精品无码久久久不卡 | 国产精品揄拍100视频| 色一乱一伦一图一区二区精品 | 中文字幕久久精品| 亚洲国产高清精品线久久| 久久久久久国产精品美女| 久久亚洲av无码精品浪潮| 国产综合成人色产三级高清在线精品发布| 91精品国产91久久| 97精品国产97久久久久久免费| 2020最新久久久视精品爱| 91麻豆精品国产91久久久久久| 四虎影视国产精品亚洲精品hd| 亚洲国产精品国自产电影| 9191精品国产免费久久| 国产精品网址在线观看你懂的| 国产精品区AV一区二区| 国产精品成人观看视频网站| 国产精品偷伦视频免费观看了 | 久久精品国产99国产电影网| 国产精品爽黄69天堂a|