You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Invalid hook call问题求助:非Node/JSX环境下useState报错

问题:使用React useState钩子时持续收到Invalid hook call警告

此前制作的页面未使用useState钩子,如今尝试使用该钩子时一直收到Invalid hook call警告,试过多种调整方案都没解决。昨晚已下载最新版的react.development.js和react-dom.development.js。

HTML页面代码

<html>
    <head>
...
        <script src="./react.development.js"></script>
        <script src="./react-dom.development.js"></script>

        <script type="module">
            import AppTest from "./AppTest.js";
            const rootCtr = document.getElementById('root');
            const root = ReactDOM.createRoot(rootCtr);
            window.addEventListener('load', (event) => {
                root.render(AppTest());
            });
        </script>
    </head>
    <body>
        <div id="root"></div>
    </body>
</html>

AppTest.js模块代码

export default function AppTest(props) {
  const [count, setCount] = React.useState(0);

  const handleClick = () => {
    setCount(count + 1);
  };

  return React.createElement('div', null, 
    `Count: ${count}`,
    React.createElement('button', { onClick: handleClick }, 'Increment')
  );
}
解决方法

问题出在组件渲染的方式上:你直接调用AppTest()把组件当成普通函数执行了,这会跳过React的组件生命周期管理,导致钩子调用规则被打破。React要求必须通过React.createElement或JSX来渲染组件,这样React才能正确处理钩子逻辑。

修改HTML中的渲染代码:

window.addEventListener('load', (event) => {
    // 用React.createElement包裹组件,而非直接调用函数
    root.render(React.createElement(AppTest));
});

另外要确保react.development.js和react-dom.development.js的版本完全一致,版本不匹配也可能触发这类钩子调用错误。

内容的提问来源于stack exchange,提问作者Baba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:42:53