Javascript 钩子只能在函数组件的主体内部调用

Javascript 钩子只能在函数组件的主体内部调用,javascript,reactjs,Javascript,Reactjs,每当我尝试在我的应用程序中使用钩子时,我得到的钩子只能在函数组件的主体内部调用错误。我使用的是标准的webpack4/babel配置,带有preset env和preset react插件。我的react/react dom版本使用纱线分辨率固定到16.8.4,因此react/dom版本中不应存在不匹配 这是最基本的用法: import React, { useState } from "react"; function MyComp() { const [hello] = useStat

每当我尝试在我的应用程序中使用钩子时,我得到的
钩子只能在函数组件的主体内部调用
错误。我使用的是标准的webpack4/babel配置,带有
preset env
preset react
插件。我的react/react dom版本使用纱线分辨率固定到
16.8.4
,因此react/dom版本中不应存在不匹配

这是最基本的用法:

import React, { useState } from "react";

function MyComp() {
  const [hello] = useState(0);

  return <div>HELLO {hello}</div>;
}
export default MyComp;
import React,{useState}来自“React”;
函数mycop(){
const[hello]=useState(0);
返回HELLO{HELLO};
}
导出默认mycop;
我已经查过列出的陷阱了,但运气不好

还有什么我需要包括的吗

T.J.Crowder的堆栈代码段版本(有效):

const{useState}=React;
函数mycop(){
const[hello]=useState(0);
返回HELLO{HELLO};
}
ReactDOM.render(
,
document.getElementById(“根”)
);

问题在于我的网页包配置-我在将输出包的脚本标记添加到我的index.html时使用了HtmlWebpackPlugin,如下所述:


这意味着React被包含两次,从而导致错误。遗憾的是,我之前的所有检查都是针对不同版本的,而不是同一版本的两个实例

请说明如何使用MyComp。如果您直接作为函数调用
MyComp()
,react会抱怨。我将您的代码放入了堆栈片段(进行了所需的非常小的更改),它工作正常。请更新我为您添加的代码片段,以显示您真正在做什么,这样我们可以帮助您理解为什么它不起作用。请仔细检查您是否安装了正确版本的react和react dom。我确实使用标准JSX语法调用组件。事实上,您所创建的代码片段也适用于我。我已经更新了我的问题,提供了一些关于我发现的更多信息。
纱线列表
是否列出了
包.json中所写的内容,或者它是否查看了您系统上实际安装的内容?直接查看
node\u modules/react/package.json
node\u modules/react dom/package.json
。很好的理解,很好的解释问题,很好的跟进。