【发布时间】:2020-12-17 01:56:04
【问题描述】:
我收到错误react.development.js:1501 Uncaught (in promise) Error: Invalid hook call. Hooks can only be called inside of the body of a function component.,我在函数组件的顶部使用它,我的 React 版本和 ReactDOM 版本都是 17.0.1。我只反应进口一次。我相信我遵守了所有的规则。当我搜索错误时,我不断得到 React 文档已经描述的所有建议和规则。但我还有另一个组件使用状态并且不会抛出此错误。 这是我的代码。
const { useState } = React;
export default () => {
const [list, setList] = useState([]);
return (
<datalist id="themes">{
list.map((item, index) => {
return <option value={item} key={index} />
})
}</datalist>
);
}
在我的示例中,React 是一个全局变量,我通过 CDN 包含它。
【问题讨论】:
-
我认为 linter 可能会挂断匿名函数的默认导出。尝试先给它起个名字,
const MyComponent = () => ...,然后导出它,export default MyComponent;。 -
相当确定draw是对的,你只能在react组件或钩子中使用钩子(以'use'开头的函数)。由于它根本没有名字,linter 没有意识到它实际上是一个组件,并认为它只是一个常规的 JS 函数,其中不允许使用钩子
-
我没有使用 linter,真正让我感动的是我有另一个组件几乎 100% 相同,并且不会出错。事实上,当我在此处复制并粘贴该代码以使其 100% 相同时,我仍然会收到错误,但仅在此组件上而不是在另一个组件上。
-
我将其更新为使用命名实函数(而不是箭头函数),但仍然显示此错误。
-
你能同时显示两个函数吗,一个会产生错误,一个不会?我看不出这段代码有什么问题。
标签: reactjs react-hooks