早上好,

我有一个样式化的MUI工具提示组件来为它创建一个定制的主题. 当我使用它时,我在浏览器控制台中收到以下警告:

client.js:1 Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?

Check the render method of `Styled(Component)`.
    at eval (webpack-internal:///./src/components/lightToolTip.tsx:23:28)
    at eval (webpack-internal:///./node_modules/@emotion/react/dist/emotion-element-c39617d8.browser.esm.js:60:66)
    at _c1 (webpack-internal:///./src/components/lightToolTip.tsx:49:27)
    at LinkComponent (webpack-internal:///./node_modules/next/dist/client/link.js:113:26)
    at div
    at eval (webpack-internal:///./node_modules/@emotion/react/dist/emotion-element-c39617d8.browser.esm.js:60:66)
    at Box (webpack-internal:///./node_modules/@mui/system/esm/createBox.js:37:72)
    at div
    at eval (webpack-internal:///./node_modules/@emotion/react/dist/emotion-element-c39617d8.browser.esm.js:60:66)
    at Box (webpack-internal:///./node_modules/@mui/system/esm/createBox.js:37:72)
    at div
    at div
    at eval (webpack-internal:///./node_modules/@emotion/react/dist/emotion-element-
[...]

所以代码看起来就像

const LightTooltip = styled(({ className, ...props }: TooltipProps) => (
    <Tooltip {...props} classes={{ popper: className }} />
))(({ theme }) => ({
    [`& .${tooltipClasses.tooltip}`]: {
        backgroundColor: theme.palette.neutral[900],
        color: 'rgba(255, 255, 255, 255)',
        boxShadow: theme.shadows[1],
        fontSize: 11,
    },
}));

在进行了一些Google搜索之后,我已经try 包装样式组件:

import { Tooltip, TooltipProps, styled, tooltipClasses } from '@mui/material';
import React from 'react';

const InnerLightTooltip = styled(({ className, ...props }: TooltipProps) => (
    <Tooltip {...props} classes={{ popper: className }} />
))(({ theme }) => ({
    [`& .${tooltipClasses.tooltip}`]: {
        backgroundColor: theme.palette.neutral[900],
        color: 'rgba(255, 255, 255, 255)',
        boxShadow: theme.shadows[1],
        fontSize: 11,
    },
}));

export const LightTooltip = React.forwardRef<HTMLDivElement, TooltipProps>((props, ref) => {
    return <InnerLightTooltip {...props} ref={ref} classes={{ popper: props.className }} />;
});

LightTooltip.displayName = 'LightTooltip';

我不知道为什么会出现此警告,也不知道如何修复.

推荐答案

当将Material-UIstyled-components@emotion/styled一起使用时,使用Style包装MUI组件有时会产生您遇到的警告.当MUI组件在内部转发Ref时,尤其会发生这种情况.

试试这个代码:

import { Tooltip, TooltipProps, styled, tooltipClasses } from '@mui/material';

const LightTooltip = styled(
  React.forwardRef<HTMLDivElement, TooltipProps>((props, ref) => {
    const { className, ...other } = props;
    return <Tooltip {...other} ref={ref} classes={{ popper: className }} />;
  })
)(({ theme }) => ({
  [`& .${tooltipClasses.tooltip}`]: {
    backgroundColor: theme.palette.neutral[900],
    color: 'rgba(255, 255, 255, 255)',
    boxShadow: theme.shadows[1],
    fontSize: 11,
  },
}));

LightTooltip.displayName = 'LightTooltip';

Reactjs相关问答推荐

如何在useEffect中使用useParams()

如何避免react 使用ESLINTreact 挂钩/穷举-deps进行第一次呈现

useTranslation不会在languageChanged上重新呈现组件

可以使用mode.css/mode.scss引用常规的类名吗?

Reaction Google Maps API无法获取标题

如何使ionic 面包屑在州政府条件下可点击?

Reaction上下文值无法传递给其他组件

React-React中是否完全支持基于类的组件?

透明MOV文件未出现在我的React网页中

如何在我的 React 应用程序中仅显示我的 Register 组件

在 React 中使用forwardRef时无法声明自定义属性

React-dom 的钩子调用无效.我能做些什么?

Reactjs:MUI5:MobileDateTimePicker API:如何自定义日历中的文本

如何修改 react/jsx-no-useless-fragment 规则以允许 <>{children}

React - 使用 useEffect 还是直接在 onChange 方法中更改值对性能最好?

React Native应用如何订阅Supabase的实时数据?

如何禁用 redux-toolkit 的不可序列化值测试警告?

添加 React/Redux 组件模板的 VS Code 扩展

如何解决在 react.js 中找不到模块错误

react 路由路由加载器不适用于嵌套组件