import { useOptInOut } from "../../hooks/useOptInOut/useOptInOut";
import withTranslation, { WithTranslationComponentProps } from '../../hoc/WithTranslation';
const DataConsent = (props: WithTranslationComponentProps) => {
const optStatusResponse = useOptInOutStatus();
const enable = optStatusResponse.value?.enabled;
const selectOptType = () => {
if (enable) {
setOptInOut(false);
} else if (!enable) {
setOptInOut(true);
}
}
const onSubmit = () => {
const response = useOptInOut(optType);
}
return (
<section className="app-section-container">
<div className="radio">
{!enable && <label>
<input type="radio" value="optIn" onChange={selectOptType} />
<b>Opt-in: </b>
</label>}
{enable && <label>
<input type="radio" value="optOut" onChange={selectOptType} />
<b>Opt-out: </b>
</label>}
<div className="cta-buttons">
<button className={`ui primary button`} onClick={onSubmit}>
SUBMIT
</button>
</div>
<section>
)
export default withScrollTop(withTranslation(DataConsent as any));
你好,
我尝试在单击提交按钮时进行调用,此调用将使用钩子进行POST API调用。
我的问题是,我不能从我的函数组件调用钩子。请看一下我的代码,让我知道你是否能帮助我。
这是我遇到的错误信息。
无法在回调内部调用React Hook "useOptInOut"。必须在React函数组件或自定义React Hook函数react-hooks/rules-of-hooks中调用React Hook。
1条答案
按热度按时间sdnqo3pr1#
当您尝试在函数内部或组件顶级之外的任何其他位置使用
React hook
时,预期会出现此错误。问题是:
如果你的钩子依赖于
optType
,然后马上执行给你一个响应,那么你需要稍微重构钩子,让它返回一个回调函数。更新你的钩子,看起来更像这样:
useOptInOut.ts
现在,在组件内部,您可以正确地将
useOptInOut
挂钩放到需要的顶层位置:现在更新您的
onSubmit
: