Formik: рдирдХрд╛рдмрдкреЛрд╢реЛрдВ рдХрд╛ рдЗрдирдкреБрдЯ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдордИ 2018  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: formium/formik

рд╕рд╡рд╛рд▓

рдХреНрдпрд╛ рдлреЙрд░реНрдорд┐рдХ рдХреЗ рд╕рд╛рде рдорд╛рд╕реНрдХ рдЗрдирдкреБрдЯ рдкреНрд▓рдЧрдЗрди (рдЬреИрд╕реЗ рд░рд┐рдПрдХреНрд╢рди-рдЯреЗрдХреНрд╕реНрдЯ-рдорд╛рд╕реНрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@jaredpalmer рдзрдиреНрдпрд╡рд╛рдж рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ рд╣реВрдБ рдпрд╣рд╛рдБред рдЕрдЧрд░ рдХреЛрдИ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ ( react-text-mask рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ):

      input = <Field name={name} render={({ field }) => {
        return <MaskedInput mask={Masks[mappedField.mask]}
            {...field}
            id={name}
            placeholder={mappedField.placeholder[language]} />
      }} />

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдБ, рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╕реНрдЯрдо рдЗрдирдкреБрдЯ рдХреА рддрд░рд╣ рдорд╛рдирддреЗ рд╣реИрдВред

@jaredpalmer рдзрдиреНрдпрд╡рд╛рдж рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ рд╣реВрдБ рдпрд╣рд╛рдБред рдЕрдЧрд░ рдХреЛрдИ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ ( react-text-mask рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ):

      input = <Field name={name} render={({ field }) => {
        return <MaskedInput mask={Masks[mappedField.mask]}
            {...field}
            id={name}
            placeholder={mappedField.placeholder[language]} />
      }} />

@ThiagoMiranda рдХреИрд╕реЗ рдЖрдк рдирдХрд╛рдмрдкреЛрд╢ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ?
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╣рд╛рдБ рдХреЗ рд╕рд╛рде:

          passport: yup
            .string()
            .matches(/(^[0-9]+$)/, 'only digits here')
            .required('enter something')
            .min(4, 'Number of digits left: ' + digitsLeft)
            .max(4, 'This is too much')

рдореБрдЭреЗ рдорд┐рдирд┐рдордо рд░реВрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рд╡реИрд▓реНрдпреВ "0___" рдорд┐рд▓рддреА рд╣реИ рдФрд░ рдХреИрдВрдЯ рд╡реЗрд░реАрдлрд╛рдЗрдб рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдореИрдВ рдирдХрд╛рдмрдкреЛрд╢ рдЗрдирдкреБрдЯ рдФрд░ рдЙрд╕рдХреЗ рдорд╛рд╕реНрдХрд┐рдВрдЧ рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм im рдЯрд╛рдЗрдкрд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдореИрдВ рдлрд╝реАрд▓реНрдб рдкрд░ рдирд╛рдо рд░рдЦрддрд╛ рд╣реВрдВ, рдлрд┐рд░ рднреА рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдХреНрдпреЛрдВрдХрд┐ Field рдПрдХ field рдкреНрд░реЛрдк рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдЬреЛ MaskedInput рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдореИрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдУрдХреЗ рдЗрд╕рд▓рд┐рдП рдлреАрд▓реНрдб рдкреНрд░реЛрдк рдлреАрд▓реНрдб рд╕реЗ рд╕рднреА рдЕрдЬреНрдЮрд╛рдд рдкреНрд░реЙрдкреНрд╕ рд╕рд╣рд┐рдд рдирд╣реАрдВ рд╣реИ

@yyynnn - рдореИрдВрдиреЗ рдЙрд╕реА рдореБрджреНрджреЗ рдХреЛ рдорд╛рд░рд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдХрд╕реНрдЯрдо рдЪреЗрдВрдЬ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдорд╛рд╕реНрдХ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдк рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлреЙрд░реНрдорд┐рдХ рдХреЗ setFieldValue рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

handleChange = (event, field, form, charsToStrip) => {
  const cleanValue = stripCharacters(event.target.value, charsToStrip)
  form.setFieldValue(field.name, cleanValue)
}

function stripCharacters (string, characters) {
  const re = new RegExp(`[${characters}]+`, 'g')
  return string.replace(re, '')
}

@ThiagoMiranda рдХреИрд╕реЗ рдЖрдк рдирдХрд╛рдмрдкреЛрд╢ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ?
...
рдореБрдЭреЗ рдорд┐рдирд┐рдордо рд░реВрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рд╡реИрд▓реНрдпреВ "0___" рдорд┐рд▓рддреА рд╣реИ рдФрд░ рдХреИрдВрдЯ рд╡реЗрд░реАрдлрд╛рдЗрдб рд╣реЛрддрд╛ рд╣реИред

pls рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ https://codesandbox.io/s/4rkyylp24w

@jaredpalmer рдзрдиреНрдпрд╡рд╛рдж рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ рд╣реВрдБ рдпрд╣рд╛рдБред рдЕрдЧрд░ рдХреЛрдИ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ ( react-text-mask рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ):

рдпрд╣ рдХрд╛рдо рдореЗрд░реЗ рд▓рд┐рдП рднреА
<Field name='telefone' > {({ field }) => ( <MaskedInput mask={['(', /[1-9]/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]} {...field} placeholder='Telefone' className="form-control" /> )} </Field>

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

PeerHartmann picture PeerHartmann  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

outaTiME picture outaTiME  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jordantrainor picture jordantrainor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

giulioambrogi picture giulioambrogi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sibelius picture sibelius  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ