在 React Hook 表单中显示来自控制器的错误
Show Error From Controllers in React Hook Forms
我试图从我的输入中抛出所需的错误,这些错误已包装在 react-hook-form
版本 7 的 Controller 组件中。
我的输入是 Material-UI 文本字段;
<Controller
name="firstName"
control={control}
defaultValue=""
rules={{ required: true}}
render={({field}) =>
<TextField
id="firstName"
name="firstName"
autoComplete="fname"
variant="outlined"
fullWidth
label="First Name"
autoFocus={true}
{...field} />
}
/>
我想在规则失败时暴露错误。
您需要将与您的字段名称匹配的 errors
对象的 属性 传递给您的 Material UI <TextField />
。 errors
对象可通过 formState
属性.
const {
handleSubmit,
control,
formState: { errors }
} = useForm();
您还应该将 ref
传递给 inputRef
属性,而不是将其设置为 ref
属性。如果提交时出现错误,这将自动聚焦 <TextField />
输入。
<Controller
name="firstName"
control={control}
defaultValue=""
rules={{ required: true }}
render={({ field: { ref, ...field } }) => (
<TextField
{...field}
inputRef={ref}
id="firstName"
autoComplete="fname"
variant="outlined"
fullWidth
error={!!errors.firstName}
label="First Name"
/>
)}
/>
@knoefel 所说的有效。您可以做的另一件事是使用 fieldState
。见官方文档here.
<Controller
name="firstName"
control={control}
defaultValue=""
rules={{ required: true }}
render={({ field: { ref, ...field }, fieldState: {invalid, error} }) => (
<TextField
{...field}
inputRef={ref}
id="firstName"
autoComplete="fname"
variant="outlined"
fullWidth
error={invalid}
label="First Name"
/>
)}
/>
然后用 error
你会得到错误对象。所以你可以使用 {error?.message}
来显示错误信息。
我试图从我的输入中抛出所需的错误,这些错误已包装在 react-hook-form
版本 7 的 Controller 组件中。
我的输入是 Material-UI 文本字段;
<Controller
name="firstName"
control={control}
defaultValue=""
rules={{ required: true}}
render={({field}) =>
<TextField
id="firstName"
name="firstName"
autoComplete="fname"
variant="outlined"
fullWidth
label="First Name"
autoFocus={true}
{...field} />
}
/>
我想在规则失败时暴露错误。
您需要将与您的字段名称匹配的 errors
对象的 属性 传递给您的 Material UI <TextField />
。 errors
对象可通过 formState
属性.
const {
handleSubmit,
control,
formState: { errors }
} = useForm();
您还应该将 ref
传递给 inputRef
属性,而不是将其设置为 ref
属性。如果提交时出现错误,这将自动聚焦 <TextField />
输入。
<Controller
name="firstName"
control={control}
defaultValue=""
rules={{ required: true }}
render={({ field: { ref, ...field } }) => (
<TextField
{...field}
inputRef={ref}
id="firstName"
autoComplete="fname"
variant="outlined"
fullWidth
error={!!errors.firstName}
label="First Name"
/>
)}
/>
@knoefel 所说的有效。您可以做的另一件事是使用 fieldState
。见官方文档here.
<Controller
name="firstName"
control={control}
defaultValue=""
rules={{ required: true }}
render={({ field: { ref, ...field }, fieldState: {invalid, error} }) => (
<TextField
{...field}
inputRef={ref}
id="firstName"
autoComplete="fname"
variant="outlined"
fullWidth
error={invalid}
label="First Name"
/>
)}
/>
然后用 error
你会得到错误对象。所以你可以使用 {error?.message}
来显示错误信息。