React Hook Form 如何在子组件中调用 onSubmit?
React Hook Form how can I call onSubmit in a child component?
我正在使用 React Hook Form。我有一个使用 FormProvider 并管理表单提交的高阶组件。我想从子组件触发此功能。我遇到的问题是,当我调用子组件中的函数时,onSubmit 函数 returns 中的数据未定义。但是,当我在同一组件中单击提交时,它会按预期工作。我做错了什么?
const FormGroup = () {
const onSubmit: SubmitHandler<Inputs> = data => {
console.log('data', data);
dispatch(setEntityInformation({
data
}));
}
};
<FormProvider {...methods}>
<form onSubmit={methods.handleSubmit(onSubmit)}>
<section className="sars__sideBar">
<TabBar
controls={TAB_CONTROLS.controls}
activeIndex={index}
setActiveTab={i => setActiveTab(i)}
onSubmit={onSubmit}
/>
</section>
<PrimaryButton onClick={() => {
setActiveTab(index + 1);
}}
>
<input type="submit" value="Continue" /> // submits form as expected
</PrimaryButton>
</form>
</FormProvider>
}
// 子组件
const TabBar = ({ activeIndex, setActiveTab, controls, onSubmit }) => (
<Tabs>
{controls.map((control, i) => (
<div
className={`tab__wrapper ${i === activeIndex ? 'active' : ''}`}
key={control.key}
onClick={() => {
setActiveTab(i);
if (i > activeIndex) {
onSubmit(); // function is called, but data is undefined
}
}}
>
<div className="u-alignCenter">
<p>{control.label}</p>
</div>
<div className="tab__status" />
</div>
))}
</Tabs>
);
也许通过 handleSubmit
呼叫 onSubmit()
会有帮助?像这样:handleSubmit(onSubmit)();
您需要这个,因为 handleSubmit 是 运行 异步的,并且您实际上使用第二个括号调用返回的函数。
您可以阅读更多相关信息here
我正在使用 React Hook Form。我有一个使用 FormProvider 并管理表单提交的高阶组件。我想从子组件触发此功能。我遇到的问题是,当我调用子组件中的函数时,onSubmit 函数 returns 中的数据未定义。但是,当我在同一组件中单击提交时,它会按预期工作。我做错了什么?
const FormGroup = () {
const onSubmit: SubmitHandler<Inputs> = data => {
console.log('data', data);
dispatch(setEntityInformation({
data
}));
}
};
<FormProvider {...methods}>
<form onSubmit={methods.handleSubmit(onSubmit)}>
<section className="sars__sideBar">
<TabBar
controls={TAB_CONTROLS.controls}
activeIndex={index}
setActiveTab={i => setActiveTab(i)}
onSubmit={onSubmit}
/>
</section>
<PrimaryButton onClick={() => {
setActiveTab(index + 1);
}}
>
<input type="submit" value="Continue" /> // submits form as expected
</PrimaryButton>
</form>
</FormProvider>
}
// 子组件
const TabBar = ({ activeIndex, setActiveTab, controls, onSubmit }) => (
<Tabs>
{controls.map((control, i) => (
<div
className={`tab__wrapper ${i === activeIndex ? 'active' : ''}`}
key={control.key}
onClick={() => {
setActiveTab(i);
if (i > activeIndex) {
onSubmit(); // function is called, but data is undefined
}
}}
>
<div className="u-alignCenter">
<p>{control.label}</p>
</div>
<div className="tab__status" />
</div>
))}
</Tabs>
);
也许通过 handleSubmit
呼叫 onSubmit()
会有帮助?像这样:handleSubmit(onSubmit)();
您需要这个,因为 handleSubmit 是 运行 异步的,并且您实际上使用第二个括号调用返回的函数。
您可以阅读更多相关信息here