React 钩子表单在提交时返回空白对象
React hook form returning blank object on submit
这是我的简化问题:
https://codesandbox.io/s/busy-fire-mm91r?file=/src/FormWrapper.tsx
代码:
export const FormItemWrapper = ({ children }) => {
return <FormItem>{children}</FormItem>;
};
export const FormWrapper = ({ children }) => {
const { handleSubmit } = useForm();
const onSubmit = (data) => {
console.log(data); // logs { }
};
return <Form onFinish={handleSubmit(onSubmit)}>{children}</Form>;
};
export default function App() {
const { control, watch } = useForm();
console.log(watch()); // logs { }
return (
<FormWrapper>
<FormItemWrapper>
<Controller
control={control}
name="tmp"
render={({ field }) => <Input {...field} />}
/>
</FormItemWrapper>
<FormItemWrapper>
<Button htmlType="submit">Save</Button>
</FormItemWrapper>
</FormWrapper>
);
}
问题:
React-hook-form
似乎看不到我输入的数据。我可以使用 antd
获取它,但不能使用 react-hook-form
。为什么?我错过了什么?
watch()
只记录一次,它记录 { }
。 onSubmit
日志 { }
您使用 useForm 调用创建了两个不同的表单实例。如果你想在 Controller 中获取当前的表单上下文,你应该使用 useFormContext 并将你的表单包装在 FormProvider 中。
工作示例:
https://codesandbox.io/s/admiring-lehmann-mgd0i?file=/src/App.tsx
这是我的简化问题:
https://codesandbox.io/s/busy-fire-mm91r?file=/src/FormWrapper.tsx
代码:
export const FormItemWrapper = ({ children }) => {
return <FormItem>{children}</FormItem>;
};
export const FormWrapper = ({ children }) => {
const { handleSubmit } = useForm();
const onSubmit = (data) => {
console.log(data); // logs { }
};
return <Form onFinish={handleSubmit(onSubmit)}>{children}</Form>;
};
export default function App() {
const { control, watch } = useForm();
console.log(watch()); // logs { }
return (
<FormWrapper>
<FormItemWrapper>
<Controller
control={control}
name="tmp"
render={({ field }) => <Input {...field} />}
/>
</FormItemWrapper>
<FormItemWrapper>
<Button htmlType="submit">Save</Button>
</FormItemWrapper>
</FormWrapper>
);
}
问题:
React-hook-form
似乎看不到我输入的数据。我可以使用 antd
获取它,但不能使用 react-hook-form
。为什么?我错过了什么?
watch()
只记录一次,它记录 { }
。 onSubmit
日志 { }
您使用 useForm 调用创建了两个不同的表单实例。如果你想在 Controller 中获取当前的表单上下文,你应该使用 useFormContext 并将你的表单包装在 FormProvider 中。
工作示例:
https://codesandbox.io/s/admiring-lehmann-mgd0i?file=/src/App.tsx