![](/img/trans.png)
[英]I keep getting:Error: Invalid hook call. Hooks can only be called inside of the body of a function component
[英]I have this React Invalid Hook Call Error that I'm getting and I wanted to see if I was breaking the rules of hooks or is it something else?
我收到以下错误。
无效的挂钩调用。 钩子只能在 function 组件的主体内部调用。 这可能由于以下原因之一而发生:
有关如何调试和解决此问题的提示,请参阅(我无法添加的链接)。
这是我的代码。 是违反了钩子规则还是其他问题?
import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
import { useData } from 'useData';
export const checkReference = ({
refId,
}) => {
const data = useData(); //useContext hook
let refData = {};
if (refId) refData = data.getReference(refId);
useEffect(() => {
console.log('INITIAL LOGIC');
if (refData.parameter){
console.log('SECONDARY LOGIC', refData);
}
}, [])
checkReference.propTypes = {
refId: PropTypes.string,
}
checkReference.defaultProps = {
refId: null,
}
}
我使用checkReference('page-name');
从另一个文件调用它
React 钩子旨在用于功能组件内部,例如:
export const CustomComponent = () => {}
export function CustomComponent() {}
它们不能在正常的 function 中使用,因为它不会存在于 React 组件的上下文中。 如果你想在组件外部定义的函数内部使用useState
或useEffect
类的东西,你必须创建一个自定义钩子。 也就是说, use
前缀(例如useCheckReference
)创建一个 function ,然后像这样使用它:
export const MyComponent = () => {
const reference = useCheckReference()
}
这样 React 就知道 function 大概会在组件内部被调用,并且 hooks 的使用是可靠的,也会对 hooks 和组件生命周期进行一些优化。
我在我的 Next.js 应用程序中遇到了同样的问题。 这是一个与缓存相关的问题。 你可以试试这些步骤。
node_modules
和.next
文件夹npm install
或yarn
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.