我正在使用Controller
react-hook-form渲染自定义组件。
如果使用时出现错误register
,则焦点正常,但Controller 不正常。
当自定义组件仅处理单个输入时,我能够找到一种处理错误的方法,但是当它有多个输入时,我找不到一种方法来处理它。
表单.js
import { Controller, useForm } from "react-hook-form";
import CustomInput from "./CustomInput";
import * as yup from "yup";
const schema = yup.object({
name: yup.object().shape({
first: yup.string().required(),
last: yup.string().required(),
}),
});
function Form() {
const {
handleSubmit,
control,
formState: { errors },
} = useForm({
defaultValues: { name: { first: "", last: "" } },
resolver: yupResolver(schema),
});
const onSubmit = (data) => console.log(data);
return (
<form onSubmit={handleSubmit(onSubmit)}>
<Controller
name="name"
control={control}
rules={{ required: true }}
render={({ field }) => (
<CustomInput
value={field.value}
onChange={(value) => field.onChange(value)}
errors={errors}
/>
)}
/>
<button type="submit">Send</button>
</form>
);
}
export default Form;
自定义输入.js
function CustomInput({ value, onChange, errors }) {
const changeFirst = (e) => {
onChange({ first: e.target.value, last: value?.last });
};
const changeLast = (e) => {
onChange({ first: value?.first, last: e.target.value });
};
return (
<div>
<input type="text" value={value.first} onChange={changeFirst} />
<input type="text" value={value.last} onChange={changeLast} />
{errors?.name && (
<p className="errmsg">
{errors?.name?.first?.message || errors?.name?.last?.message}
</p>
)}
</div>
);
}
export default CustomInput;
当自定义组件中有多个输入时,如何获得错误焦点?