рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЬрдЯрд┐рд▓ рд░реВрдкреЛрдВ рдХрд╛ рд╕рддреНрдпрд╛рдкрдиред рднрд╛рдЧ 1

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╕рддреНрдпрд╛рдкрди-рдмреВ рдШрдЯрдХ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред

npm рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╕рддреНрдпрд╛рдкрди-рдмреВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рдмрд╣реБрдд рд╕реА рдмрд╛рддреЗрдВ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдЫреЛрдЯрд╛ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред

import React, {Component} from 'react'; import {connect, Form, Input, logger} from 'react-validation-boo'; class MyForm extends Component { sendForm = (event) => { event.preventDefault(); if(this.props.vBoo.isValid()) { console.log('       ', this.props.vBoo.getValues()); } else { console.log('   ', this.props.vBoo.getErrors()); } }; getError = (name) => { return this.props.vBoo.hasError(name) ? <div className="error">{this.props.vBoo.getError(name)}</div> : ''; }; render() { return <Form connect={this.props.vBoo.connect}> <div> <Input type="text" name="name" /> {this.getError('name')} </div> <button onClick={this.sendForm}> {this.props.vBoo.isValid() ? ' ': ' !!!'} </button> </Form> } } export default connect({ rules: () => ( [ ['name', 'required'], ] ), middleware: logger })(MyForm); 


рдЗрд╕ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВред

рдЪрд▓реЛ рдХрдиреЗрдХреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ , рд╣рдо рдЕрдкрдиреЗ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдФрд░ рдЕрдиреНрдп рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ, рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдШрдЯрдХ ( MyForm ) рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдкреНрд░реЙрдкрд░ рдлреЙрд░реНрдо рдлреЙрд░реНрдореЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗ ред

рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХреЗ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдлреЙрд░реНрдо рдШрдЯрдХ рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ = {this.props.connect} ред рдиреЗрд╕реНрдЯреЗрдб рдШрдЯрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдбрд┐рдЬрд╛рдЗрди рд╣реИред
<рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ = "рдЯреЗрдХреНрд╕реНрдЯ" рдирд╛рдо = "рдирд╛рдо" /> рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдЬрд┐рд╕реЗ рд╣рдо рдЬрд╛рдВрдЪреЗрдВрдЧреЗ, рд╣рдордиреЗ рдирд┐рдпрдо рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдо рдкрд╛рд░рд┐рдд рдХрд┐рдП ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдирд╛рдо рдЦрд╛рд▓реА ( рдЖрд╡рд╢реНрдпрдХ ) рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдордиреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рднреА рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░: рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдкрд╛рд╕ рдХрд┐рдпрд╛ред

рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХреЗ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ , рд╣рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдорд┐рд▓рд╛:

  1. vBoo.isValid () - рд╕рд╣реА рд╣реИ рдпрджрд┐ рд╕рднреА рдЗрдирдкреБрдЯ рдШрдЯрдХреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  2. vBoo.hasError (рдирд╛рдо) - рд╕рд╣реА рд╣реИ рдЕрдЧрд░ рдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдШрдЯрдХ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ
  3. vBoo.getError (рдирд╛рдо) - рдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП, рддреНрд░реБрдЯрд┐ рдкрд╛рда рджреЗрддрд╛ рд╣реИ

рдЕрдм рд╣рдо рдЗрд╕реЗ рдзреАрд░реЗ-рдзреАрд░реЗ рдЬрдЯрд┐рд▓ рдХрд░ рджреЗрдВрдЧреЗ, рдкрд╣рд▓реЗ рд╣рдо рднрд╛рд╖рд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░ рджреЗрдВрдЧреЗ, рддрд╛рдХрд┐ рд╣рдо рднрд╛рд╖рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХреЗрдВ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рдФрд░ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдо рднреА рдЬреЛрдбрд╝ рд╕рдХреЗрдВред

 import React, {Component} from 'react'; import {connect, Form, Input, InputCheckbox} from 'react-validation-boo'; class MyForm extends Component { sendForm = (event) => { event.preventDefault(); if(this.props.vBoo.isValid()) { console.log('       ', this.props.vBoo.getValues()); } else { console.log('   ', this.props.vBoo.getErrors()); } }; getError = (name) => { return this.props.vBoo.hasError(name) ? <div className="error">{this.props.vBoo.getError(name)}</div> : ''; }; render() { return <Form connect={this.props.vBoo.connect}> <div> <label>{this.props.vBoo.getLabel('name')}:</label> <Input type="text" name="name" /> {this.getError('name')} </div> <div> <label>{this.props.vBoo.getLabel('email')}:</label> <Input type="text" name="email" value="default@mail.ru" /> {this.getError('email')} </div> <div> <label>{this.props.vBoo.getLabel('remember')}:</label> <InputCheckbox name="remember" value="yes" /> {this.getError('remember')} </div> <button onClick={this.sendForm}> {this.props.vBoo.isValid() ? ' ': ' !!!'} </button> </Form> } } export default connect({ rules: (lang) => { let rules = [ [ ['name', 'email'], 'required', { error: '%name%    ' } ], ['email', 'email'] ]; rules.push(['remember', lang === 'ru' ? 'required': 'valid']); return rules; }, labels: (lang) => ({ name: '', email: ' ', remember: '' }), lang: 'ru' })(MyForm); 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЪреЗрдХрдмреЙрдХреНрд╕ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд░реВрд╕реА рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЛрдВ рдореЗрдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рдорд╛рдиреНрдп рд╣реЛрддрд╛ рд╣реИред

рд╣рдордиреЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рд▓реЗрдмрд▓ (рд▓реИрдВрдЧ) рднреА рдкрд╛рд╕ рдХрд┐рдпрд╛, рдЬреЛ рдкрдардиреАрдп рд░реВрдк рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИред

рдЖрдкрдХреЗ рдШрдЯрдХ рдХреЗ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ , рдПрдХ рдЧреЗрдЯрд▓реИрдм (рдирд╛рдо) рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд▓реЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдП рдЧрдП рдорд╛рди рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИред

VBoo рдХреЛрд░ рдШрдЯрдХ


рдлреЙрд░реНрдо , рдЗрдирдкреБрдЯ , рдЗрдирдкреБрдЯрд░реЗрдбрд┐рдпреЛ , рдЗрдирдкреБрдЯрдЪреЗрдХрдмреЙрдХреНрд╕ , рд╕реЗрд▓реЗрдХреНрдЯ , рдЯреЗрдХреНрд╕рд╛рд░рд┐рдпрд╛ ред

 import React, {Component} from 'react'; import {connect, Form, Input, Select, InputRadio, InputCheckbox, Textarea} from 'react-validation-boo'; class MyForm extends Component { sendForm = (event) => { event.preventDefault(); if(this.props.vBoo.isValid()) { console.log('       ', this.props.vBoo.getValues()); } else { console.log('   ', this.props.vBoo.getErrors()); } }; getError = (name) => { return this.props.vBoo.hasError(name) ? <div className="error">{this.props.vBoo.getError(name)}</div> : ''; }; render() { return <Form connect={this.props.vBoo.connect}> <div> <label>{this.props.vBoo.getLabel('name')}:</label> <Input type="text" name="name" /> {this.getError('name')} </div> <div> <label>{this.props.vBoo.getLabel('email')}:</label> <Input type="text" name="email" value="default@mail.ru" /> {this.getError('email')} </div> <div> <label>{this.props.vBoo.getLabel('gender')}:</label> <Select name="gender"> <option disabled> </option> <option value="1"></option> <option value="2"></option> </Select> {this.getError('gender')} </div> <div> <div>{this.props.vBoo.getLabel('familyStatus')}:</div> <div> <InputRadio name="familyStatus" value="1" checked /> <label></label> </div> <div> <InputRadio name="familyStatus" value="2" /> <label></label> </div> <div> <InputRadio name="familyStatus" value="3" /> <label></label> </div> {this.getError('familyStatus')} </div> <div> <label>{this.props.vBoo.getLabel('comment')}:</label> <Textarea name="comment"></Textarea> {this.getError('comment')} </div> <div> <label>{this.props.vBoo.getLabel('remember')}:</label> <InputCheckbox name="remember" value="yes" /> {this.getError('remember')} </div> <button onClick={this.sendForm}> {this.props.vBoo.isValid() ? ' ': ' !!!'} </button> </Form> } } export default connect({ rules: () => ([ [ ['name', 'email'], 'required', { error: '%name%    ' } ], ['email', 'email'], [['gender', 'familyStatus', 'comment', 'remember'], 'valid'] ]), labels: () => ({ name: '', email: ' ', gender: '', familyStatus: ' ', comment: '', remember: '' }), lang: 'ru' })(MyForm); 

рдорд╛рдиреНрдпрддрд╛ рдирд┐рдпрдо


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдПред
рдПрдХ рдирд┐рдпрдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реЛрдЧрд╛ред

 import {validator} from 'react-validation-boo'; class myValidator extends validator { /** * name -  ,   label    * value -    * params -     3-    (rules) */ validate(name, value, params) { let lang = this.getLang(); let pattern = /^\d+$/; if(!pattern.test(value)) { let error = params.error || '   %name%   %value%'; error = error.replace('%name%', name); error = error.replace('%value%', value); this.addError(error); } } } export default myValidator; 

рдЕрдм рд╣рдорд╛рд░реЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдлрд╝реЙрд░реНрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
 import myValidator from 'path/myValidator'; // ... export default connect({ rules: () => ([ [ 'name', 'required', { error: '%name%    ' } ], [ 'name', 'myValidator', { error: '   params.error' } ] ]), labels: () => ({ name: '' }), validators: { myValidator }, lang: 'ru' })(MyForm); 

рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдЕрдкрдиреЗ рд╕рднреА рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдЬрд╣рд╛рдВ рд╡реЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ : `рдЖрдпрд╛рдд 'рдлрд╝рд╛рдЗрд▓-рд╕рддреНрдпрд╛рдкрди` ` ред рдФрд░ рдЕрдЧрд░ рдЗрд╕ рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдирд┐рдпрдо рд╣реИрдВ, рддреЛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛: Object.assign ({}, `рдЖрдпрд╛рдд 'рдлрд╝рд╛рдЗрд▓-рд╕рддреНрдпрд╛рдкрди` `, {...})

рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ


рдЙрди рдорд╛рдорд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрдм рд╣рдореЗрдВ рдлреЙрд░реНрдо рдкрд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдирд┐рдпрдореЛрдВ рдореЗрдВ рд╣рдо рдЗрд╕ рдорд╛рдиреНрдпрддрд╛ рдХреЛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдХреЛрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рднреА рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

 rules = () => ([ [ 'name', 'required', { error: '%name%    ' } ], [ 'name', 'myValidator', { scenario: ['default', 'scenario1'] } ], [ 'email', 'email', { scenario: 'scenario1' } ] ]) 

рд╕рдорд╛рд░реЛрд╣ рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

  1. vBoo.setScenario (рдкрд░рд┐рджреГрд╢реНрдп) - рдкрд░рд┐рджреГрд╢реНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдПрдХ рд╕рд░рдгреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рде рдХрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдХреНрд░рд┐рдп рд╣реИрдВ
  2. vBoo.getScenario () - рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рд╕рд░рдгреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ
  3. vBoo.hasScenario (рдирд╛рдо) - рдХреНрдпрд╛ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрднреА рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдирд╛рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ

рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд░реВрдк рдореЗрдВ рдПрдХ рджрд░реНрд╢рдиреАрдп рд╡рд╕реНрддреБ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕рднреА рд╕рдВрднрд╡ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ, рд╕рд╣реА рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдХреНрд░рд┐рдп рд╣реИ, рдЧрд▓рдд рдирд╣реАрдВ рд╣реИред

рд╕рд╛рде рд╣реА рд╕рд╛рде AddScenaries рдФрд░ DeleteScenaries рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝ рдФрд░ рд╣рдЯрд╛ рджреЗрдВрдЧреЗред

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рд╕рд╣рд╡рд╛рд╕" рдпрд╛ "рд╡рд┐рд╡рд╛рд╣" рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкрд░рд┐рджреГрд╢реНрдп-рд╡рд┐рд╡рд╛рд╣рд┐рдд рдкрд░рд┐рджреГрд╢реНрдп ред

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдЙрдиреНрдирдд" рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕реЗрдЯ рд╣реИ, рддреЛ рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд╕реНрдХреНрд░рд┐рдкреНрдЯ ' рдкрд░рд┐рджреГрд╢реНрдп-рдЬреЛрдбрд╝ 'ред

 import React, {Component} from 'react'; import {connect, Form, Input, Select, InputRadio, InputCheckbox, Textarea} from 'react-validation-boo'; class MyForm extends Component { constructor() { super(); this.scenaries = { 'scenario-married': false, 'scenario-addition': false } } changeScenaries(addScenaries = [], deleteScenaries = []) { addScenaries.forEach(item => this.scenaries[item] = true); deleteScenaries.forEach(item => this.scenaries[item] = false); let scenario = Object.keys(this.scenaries) .reduce((result, item) => this.scenaries[item]? result.concat(item): result, []); this.props.vBoo.setScenario(scenario); } addScenaries = (m = []) => this.changeScenaries(m, []); deleteScenaries = (m = []) => this.changeScenaries([], m); sendForm = (event) => { event.preventDefault(); if(this.props.vBoo.isValid()) { console.log('       ', this.props.vBoo.getValues()); } else { console.log('   ', this.props.vBoo.getErrors()); } }; getError = (name) => { return this.props.vBoo.hasError(name) ? <div className="error">{this.props.vBoo.getError(name)}</div> : ''; }; changeFamilyStatus = (event) => { let val = event.target.value; if(val !== '1') { this.addScenaries(['scenario-married']) } else { this.deleteScenaries(['scenario-married']); } }; changeAddition = (event) => { let check = event.target.checked; if(check) { this.addScenaries(['scenario-addition']) } else { this.deleteScenaries(['scenario-addition']); } }; getCommentContent() { if(this.props.vBoo.hasScenario('scenario-married')) { return ( <div key="comment-content"> <label>{this.props.vBoo.getLabel('comment')}:</label> <Textarea name="comment"></Textarea> {this.getError('comment')} </div> ); } return ''; } getAdditionContent() { if(this.props.vBoo.hasScenario('scenario-addition')) { return ( <div key="addition-content"> <label>{this.props.vBoo.getLabel('place')}:</label> <Input type="text" name="place" /> {this.getError('place')} </div> ); } return ''; } render() { return <Form connect={this.props.vBoo.connect}> <div> <label>{this.props.vBoo.getLabel('name')}:</label> <Input type="text" name="name" /> {this.getError('name')} </div> <div> <label>{this.props.vBoo.getLabel('email')}:</label> <Input type="text" name="email" value="default@mail.ru" /> {this.getError('email')} </div> <div> <label>{this.props.vBoo.getLabel('gender')}:</label> <Select name="gender"> <option disabled> </option> <option value="1"></option> <option value="2"></option> </Select> {this.getError('gender')} </div> <div> <div>{this.props.vBoo.getLabel('familyStatus')}:</div> <div> <InputRadio name="familyStatus" value="1" checked onChange={this.changeFamilyStatus} /> <label></label> </div> <div> <InputRadio name="familyStatus" value="2" onChange={this.changeFamilyStatus} /> <label></label> </div> <div> <InputRadio name="familyStatus" value="3" onChange={this.changeFamilyStatus} /> <label></label> </div> {this.getError('familyStatus')} </div> {this.getCommentContent()} <div> <label>{this.props.vBoo.getLabel('addition')}:</label> <InputCheckbox name="addition" value="yes" onChange={this.changeAddition} /> {this.getError('addition')} </div> {this.getAdditionContent()} <button onClick={this.sendForm}> {this.props.vBoo.isValid() ? ' ': ' !!!'} </button> </Form> } } export default connect({ rules: () => ([ [ ['name', 'gender', 'familyStatus', 'email'], 'required', { error: '%name%    ' } ], ['email', 'email'], [ 'comment', 'required', { scenario: 'scenario-married' } ], ['addition', 'valid'], [ 'place', 'required', { scenario: 'scenario-addition' } ], ]), labels: () => ({ name: '', email: ' ', gender: '', familyStatus: ' ', comment: '', addition: '', place: '' }), lang: 'ru' })(MyForm); 

рд▓реЗрдЦ рдХреЛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдЧрд▓реЗ рдПрдХ рдореЗрдВ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛, рдЬрд╣рд╛рдВ рдореИрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдШрдЯрдХреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреИрд▓реЗрдВрдбрд░ рдпрд╛ рдЗрдирдкреБрдЯ рдЦреЛрдЬ) рдмрдирд╛рдКрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдорд╛рдиреНрдп рдХрд░реВрдВ, рдХреИрд╕реЗ рд░рд┐рдбреНрдпреВрдХреНрд╕ рдФрд░ рдЕрдзрд┐рдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

Source: https://habr.com/ru/post/hi430312/


All Articles