Formik 反应形式在更改时获取字段的值
Formik react form get value of field on change
我正在使用 Formik 与 material UI 进行反应。
我有两个字段,随着值的变化,我需要对这两个字段进行计算,所以我必须获取这两个字段的值,
const formik = useFormik({
initialValues: {
quantity: '',
price: '',
total: '',
},
validationSchema: Yup.object({
quantity: Yup.string().max(5).required('Quantity is required'),
price: Yup.string().max(5).required('Price is required'),
}),
onSubmit: values => {
},
})
这是表格
<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="Quantity"
margin="normal"
name="quantity"
onBlur={formik.handleBlur}
onChange={formik.handleChange}
value={formik.values.quantity}
variant="outlined"
/>
<TextField
size="small"
error={Boolean(formik.touched.price && formik.errors.price)}
helperText={formik.touched.price && formik.errors.price}
label="Last Name"
margin="normal"
name="price"
onBlur={formik.handleBlur}
onChange={formik.handleChange}
value={formik.values.price}
variant="outlined"
/>
{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">
Submit
</Button>
</Box>
</form>
如何在每次更改时检索数量和价格的值?
我没用过 formik,所以不确定,也许你可以在你的 formik.values
上放一个 useEffect
,然后用它做任何你想做的事情。
类似
useEffect(()=>{
//do your stuff
},[formik.vaues])
如果你想在表单上显示结果,你可以在你的代码中添加类似的东西;
<div>{formik.values.price} * {formik.values.quantity}</div>
如果您想进行一些验证,可以更新您的验证架构
validationSchema: Yup.object({
quantity: Yup.string().max(5).required('Quantity is required'),
price: Yup.string().max(5)
.required('Price is required')
.when('quantity', (quantity, schema) => (quantity && schema.test(
'limit',
'some message',
value => {
return (value && value + quantity > 30) // condition
}
))),
我正在使用 Formik 与 material UI 进行反应。 我有两个字段,随着值的变化,我需要对这两个字段进行计算,所以我必须获取这两个字段的值,
const formik = useFormik({
initialValues: {
quantity: '',
price: '',
total: '',
},
validationSchema: Yup.object({
quantity: Yup.string().max(5).required('Quantity is required'),
price: Yup.string().max(5).required('Price is required'),
}),
onSubmit: values => {
},
})
这是表格
<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="Quantity"
margin="normal"
name="quantity"
onBlur={formik.handleBlur}
onChange={formik.handleChange}
value={formik.values.quantity}
variant="outlined"
/>
<TextField
size="small"
error={Boolean(formik.touched.price && formik.errors.price)}
helperText={formik.touched.price && formik.errors.price}
label="Last Name"
margin="normal"
name="price"
onBlur={formik.handleBlur}
onChange={formik.handleChange}
value={formik.values.price}
variant="outlined"
/>
{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">
Submit
</Button>
</Box>
</form>
如何在每次更改时检索数量和价格的值?
我没用过 formik,所以不确定,也许你可以在你的 formik.values
上放一个 useEffect
,然后用它做任何你想做的事情。
类似
useEffect(()=>{
//do your stuff
},[formik.vaues])
如果你想在表单上显示结果,你可以在你的代码中添加类似的东西;
<div>{formik.values.price} * {formik.values.quantity}</div>
如果您想进行一些验证,可以更新您的验证架构
validationSchema: Yup.object({
quantity: Yup.string().max(5).required('Quantity is required'),
price: Yup.string().max(5)
.required('Price is required')
.when('quantity', (quantity, schema) => (quantity && schema.test(
'limit',
'some message',
value => {
return (value && value + quantity > 30) // condition
}
))),