Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

994
Views
React Formik: cómo usar onChange y onBlur personalizados

Estoy comenzando con la biblioteca formik para reaccionar, y no puedo descifrar el uso de los accesorios handleChange y handleBlur.

De acuerdo con los documentos , handleBlur se puede configurar como accesorio en un <Formik/> , y luego debe pasarse manualmente al <input/> .

Lo intenté, sin éxito: (conservo el código sobre handleBlur para mayor claridad)

 import React from "react"; import { Formik, Field, Form } from "formik"; import { indexBy, map, compose } from "ramda"; import { withReducer } from "recompose"; const MyInput = ({ field, form, handleBlur, ...rest }) => <div> <input {...field} onBlur={handleBlur} {...rest} /> {form.errors[field.name] && form.touched[field.name] && <div> {form.errors[field.name]} </div>} </div>; const indexById = indexBy(o => o.id); const mapToEmpty = map(() => ""); const EmailsForm = ({ fieldsList }) => <Formik initialValues={compose(mapToEmpty, indexById)(fieldsList)} validate={values => { // console.log("validate", { values }); const errors = { values }; return errors; }} onSubmit={values => { console.log("onSubmit", { values }); }} handleBlur={e => console.log("bluuuuurr", { e })} render={({ isSubmitting, handleBlur }) => <Form> <Field component={MyInput} name="email" type="email" handleBlur={handleBlur} /> <button type="submit" disabled={isSubmitting}> Submit </button> </Form>} />;

¿Qué tiene de malo este enfoque? ¿Cómo se supone que deben usarse handleBlur y handleChange?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Deberá eliminar el primer handleBlur de Formik ya que el evento de desenfoque solo es válido en el nivel de campo y hacer algo como lo siguiente en su elemento Field:

 <Field component={MyInput} name="email" type="email" onBlur={e => { // call the built-in handleBur handleBlur(e) // and do something about e let someValue = e.currentTarget.value ... }} />

Consulte https://github.com/jaredpalmer/formik/issues/157

over 4 years ago · Santiago Trujillo Report

0

Enfrenté el mismo problema usando el método onChange, que creo que no existe en los accesorios de formik.

así que utilicé el método onSubmit, ya que está disponible en los accesorios de formik, que nos da los valores de los campos y luego pasé esos valores a la función de preocupación así...

 <Formik initialValues={initialValues} validationSchema={signInSchema} onSubmit={(values) => { registerWithApp(values); console.log(values); }} >

y allí puedes usar, simplemente actualicé el estado y lo pasé a axios así...

 const [user, setUser] = useState({ name: "", email: "", password: "" }); const registerWithApp = (data) => { const { name, email, password } = data; setUser({ name:name, email:email, password:password }) if (name && email && password) { axios.post("http://localhost:5000/signup", user) .then(res => console.log(res.data)) } else { alert("invalid input") }; }

y está funcionando... Espero que te ayude.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!