首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >功能组件未注册为功能组件?

功能组件未注册为功能组件?
EN

Stack Overflow用户
提问于 2021-09-09 21:29:33
回答 2查看 65关注 0票数 0

我试图在我的TypeScript React应用程序中使用Materials useStyle,但我遇到了一个奇怪的问题。

代码语言:javascript
复制
// index.tsx

import React from 'react';
import {render} from 'react-dom';

import {makeStyles} from '@material-ui/styles';

const useStyles = makeStyles({
  qwe: {
    color: 'red',
  },
});

const init = async () => {
  const classes = useStyles();

  const Root = () => (
    <div className={classes.qwe}>asd</div>
  );

  render(<Root />, document.getElementById('root'));
};

init();

当我运行这个应用程序时,我会收到这样的消息:

未知(承诺)错误:无效钩子调用。钩子只能在函数组件的主体内调用。

我调用的钩子是useStyles()。这个钩子位于功能组件的顶层,我正在运行React和React的最新版本:

代码语言:javascript
复制
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-10 02:01:11

您应该将function钩子放入function组件中,而不是纯JavaScript函数,后者会破坏钩子-规则。react函数组件的返回值必须是React元素(有效的JSX元素)。

代码语言:javascript
复制
import React from 'react';
import {render} from 'react-dom';
import {makeStyles} from '@material-ui/styles';

const useStyles = makeStyles({
  qwe: {
    color: 'red',
  },
});

const init = () => {
  const Root = () => {
    const classes = useStyles();
    return <div className={classes.qwe}>asd</div>
  };

  render(<Root />, document.getElementById('root'));
};

init();
票数 0
EN

Stack Overflow用户

发布于 2021-09-09 23:28:40

我也犯了同样的错误,我添加了一个param来解决这个问题。在您的const = add ()中,添加"{}“,如下所示。

代码语言:javascript
复制
const Init = async ({}) => {
  .....
};

给我打电话

代码语言:javascript
复制
<Init />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69124907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档