如何解决React Hooks不支持非函数组件类型

发布于 2022-09-11 22:34:21 字数 1741 浏览 22 评论 0

问题描述

两种情况:

  1. 在项目中正常的函数组件可正常使用hooks

例如简单的计时器:

// 正常工作:
...
  <Count />
...
const Count = () => {
  const [num, increaceNum] = useState(0);
  return (
    <>
      <Button onClick={() => increaceNum(num + 1)}>数字增加:</Button>{num}
    </>
  );
};
  1. 在项目中使用UI库的API渲染组件的函数组件不可正常使用hooks

指的是:

...
  <Count />
...
const Count = () => {
 const [num, increaceNum] = useState(0);
 openDialog({
    dialogId: 1,
    title: '使用 openDialog 直接打开对话框',
    children: <><div onClick={() => increaceNum(num + 1)}>增加</div>{num}</>,
    footer: <Button onClick={() => closeDialog(1)}>关闭</Button>,
  });
}

报错信息

图片

clipboard.png

文本

react-dom.development.js:35 Uncaught Invariant Violation: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app

希望解决

  1. 在API渲染的函数组件里可正常使用hooks,否则只能用回class

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

假情假意假温柔 2022-09-18 22:34:21

这个只是个函数,不是组件。
函数组件和函数还是有所区别的。前者会被React编译,最终执行的实质上是React编译后的函数;而后者在未执行时,React可能都不知道它是什么东西。
至于解决方案,可以把函数改写成函数组件,或者采用单例模式来管理其状态。

枕梦 2022-09-18 22:34:21

您好~ 这个问题我也遇到了 请问解决了吗~~~ 求解

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文