<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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
        主站蜘蛛池模板: 亚洲AV午夜成人影院老师机影院| 日韩一区二区三区免费体验| 亚洲国产人成精品| 亚洲乱码日产精品a级毛片久久| 亚洲欧洲日韩极速播放| 久久精品国产免费观看三人同眠| 亚洲国产精品无码久久久不卡| 国产视频精品免费视频| 黄色网址免费观看| 亚洲成在人线中文字幕| 91免费国产精品| 亚洲精品在线电影| 五月婷婷免费视频| 亚洲JIZZJIZZ中国少妇中文| 免费又黄又爽又猛大片午夜| 亚洲成av人片不卡无码久久| 特级毛片爽www免费版| 天堂亚洲免费视频| 一个人看的www视频免费在线观看| 亚洲国产精品尤物yw在线| eeuss影院免费92242部| 亚洲日韩一页精品发布| 免费视频成人片在线观看| 热99re久久精品精品免费| 亚洲第一se情网站| 亚洲爽爽一区二区三区| 精品免费视在线观看| 亚洲春色在线观看| 日韩精品无码人妻免费视频 | 一个人看的www免费在线视频| 免费永久看黄在线观看app| 亚洲最大中文字幕| 日本特黄a级高清免费大片| 一级成人毛片免费观看| 亚洲精品天天影视综合网| 久久精品免费全国观看国产| 亚洲AV无码男人的天堂| 亚洲色精品vr一区二区三区| 久草视频在线免费| 污视频网站在线观看免费| 亚洲第一成年男人的天堂|