Formik react form obtén el valor del campo al cambiar.
Estoy usando Formik para formularios de React con Material UI.
Tengo dos campos y necesito hacer el cálculo en esos dos campos a medida que cambian los valores, por lo que debo obtener el valor de esos dos campos.
const formik = useFormik({
initialValues: {
quantity: '',
price: '',
total: '',
},
validationSchema: Yup.object({
quantity: Yup.string().max(5).required('Se requiere la cantidad'),
price: Yup.string().max(5).required('Se requiere el precio'),
}),
onSubmit: values => {
Y aquí está el formulario
<form onsubmit="{formik.handleSubmit}">
<textfield type="number" size="small" error="{Boolean(" formik.touched.quantity="" &&="" formik.errors.quantity,="" )}="" helpertext="{" formik.touched.quantity="" &&="" formik.errors.quantity="" }="" label="Cantidad" margin="normal" name="quantity" onblur="{formik.handleBlur}" onchange="{formik.handleChange}" value="{formik.values.quantity}" variant="outlined"></textfield>
<textfield size="small" error="{Boolean(formik.touched.price" &&="" formik.errors.price)}="" helpertext="{formik.touched.price" &&="" formik.errors.price}="" label="Precio" margin="normal" name="price" onblur="{formik.handleBlur}" onchange="{formik.handleChange}" value="{formik.values.price}" variant="outlined"></textfield>
{Boolean(
formik.touched.tax_status && formik.errors.tax_status,
) && (
<formhelpertext error="">
{formik.errors.tax_status}
</formhelpertext>
)}
<box sx="{{" py:="" 2="" }}="">
<button color="primary" disabled="{formik.isSubmitting}" fullwidth="" size="large" type="submit" variant="contained">
Enviar
</button>
</box>
</form>
¿Cómo obtener los valores de cantidad y precio en cada cambio?
davy.ai
Para recuperar los valores de cantidad y precio en cada cambio en Formik, puedes agregar un atributo
onBlur
a cada componenteTextField
con la funciónhandleBlur
de Formik. De esta manera, cuando el usuario se aleje del campo de entrada después de cambiar el valor, se activará la funciónhandleBlur
y podrás acceder a los valores actualizados de los campos del formulario usandoformik.values.quantity
yformik.values.price
respectivamente.De manera similar, también puedes agregar un atributo
onChange
a cada componenteTextField
con la funciónhandleChange
de Formik para recuperar el valor actualizado de los campos del formulario en cada cambio. Los valores actualizados se pueden acceder usandoformik.values.quantity
yformik.values.price
respectivamente.Una vez que hayas recuperado los valores actualizados de cantidad y precio, puedes realizar los cálculos necesarios y actualizar el campo
total
enformik.values
en consecuencia.Para actualizar el campo
total
enformik.values
, puedes usar la funciónsetValues
de Formik dentro de la funciónhandleChange
ohandleBlur
para actualizar los valores de los campos del formulario y provocar que el componente se vuelva a renderizar. Aquí tienes un ejemplo que calcula el total basado en los valores de cantidad y precio y actualiza el campototal
:Con este código, cada vez que el usuario cambie el valor del campo
quantity
oprice
, se llamará a la funciónonChange
, la cual calculará el nuevo valor paratotal
y actualizará los valores del formulario usandoformik.setValues
. El nuevo valor detotal
se mostrará automáticamente en el formulario gracias al enlace bidireccional proporcionado por Formik.