无效的挂钩调用。 Hooks 只能在函数体内部调用 component-formik

Posted

技术标签:

【中文标题】无效的挂钩调用。 Hooks 只能在函数体内部调用 component-formik【英文标题】:Invalid hook call. Hooks can only be called inside of the body of a function component-formik 【发布时间】:2021-08-13 12:46:10 【问题描述】:

在一个简单的反应应用程序中,我使用了 formik hook useFormik,但浏览器抱怨它在错误的地方使用。 这是我所做的:

import React from 'react';
 import  useFormik  from 'formik';
 
 const SignupForm = () => 
   // Pass the useFormik() hook initial form values and a submit function that will
   // be called when the form is submitted
   const formik = useFormik(
     initialValues: 
       email: '',
     ,
     onSubmit: values => 
       alert(JSON.stringify(values, null, 2));
     ,
   );
   return (
     <form onSubmit=formik.handleSubmit>
       <label htmlFor="email">Email Address</label>
       <input
         id="email"
         name="email"
         type="email"
         onChange=formik.handleChange
         value=formik.values.email
       />
 
       <button type="submit">Submit</button>
     </form>
   );
 ;
 export default SignupForm;

然后我使用了 useState 钩子,它工作正常,但这个在抱怨。 投诉是: 错误:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用。这可能是由于以下原因之一:

    您可能有不匹配的 React 版本和渲染器(例如 React DOM) 您可能违反了 Hooks 规则 您可能在同一个应用程序中拥有多个 React 副本 有关如何调试和解决此问题的提示,请参阅 https://reactjs.org/link/invalid-hook-call。

【问题讨论】:

从您的代码中可以清楚地看出,您并没有违反钩子的规则,因为它是在组件顶部定义的。所以问题可能是原因 #1 或 #3 但是 useState 钩子工作正常,这意味着如果有 1 或 3 的东西,我们可能会看到其他钩子也不起作用 那么问题可能出在 formik 包上。卸载并重新安装它 【参考方案1】:

我遇到了类似的问题。结果发现这个包根本没有安装,但是 typescript 没有检测到它丢失了。

试试

rm -rf node_modules
rm package-lock.json
npm i 
npm i formik

然后检查你是否在 package.json 中有它

【讨论】:

以上是关于无效的挂钩调用。 Hooks 只能在函数体内部调用 component-formik的主要内容,如果未能解决你的问题,请参考以下文章

React Hooks:在验证时实例化状态挂钩错误:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用

× 错误:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用。[ReactJS]

useStaticQuery:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用

React 17 - 添加 Evergreen UI 窗格会导致错误:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用

错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。 (React-hooks React-native)

无效的挂钩调用。钩子只能在使用 react-apollo 的函数组件内部调用