如何将自定义组件传递给 MUI 工具提示中的标题道具?

How to pass a custom component to title props in MUI tooltip?

我正在尝试通过传递像图像这样的自定义组件来自定义 Tooltip 组件。

第一次用Popover一次,但是我要用Tooltip的主要原因是因为Tooltip的箭头。

基本上,我在 TypeScript 上使用 React 和 MUI v5 运行。

我构建了一个像这样的自定义工具提示组件。

    <Tooltip
      open={open}
      arrow
      placement={placement}
      title={
        <Box component="span" p={1} width={width}>
          <IconButton size="small" onClick={onClose}>
            <CloseIcon />
          </IconButton>
          <Box my={2} px={4}>
            <Typography my={2}>
              {message}
            </Typography>
            <FormControlLabel control={<Checkbox defaultChecked />} label="Don’t show again" />
          </Box>
        </Box>
      }
      {...rest}
    >
      {children}
    </Tooltip>

它似乎可以工作,但它一直显示错误消息 Tooltip title. Zero-length titles string are never displayed. 'title' is specified more than once, so this usage will be overwritten.ts(2783)

如何解决这个问题,或者我应该使用 Popover 而不是 Tooltip 组件?

您需要在 {...rest} 参数后移动 title 道具。

看起来你的 rest 参数里面已经有 title 属性,所以基本上你是用其他参数覆盖你的 title(至少打字稿认为)。

等同于:

const foo = { title: 'aaaa', sth: 'cccc' };

const bar = { title: 'bbbb', ...foo}

console.log(bar.title); // => 'aaaa'

如果您在某些支持 typescript 的环境中打开此代码,它也会显示与您的相同的错误,请参阅

您需要做的是:

const foo = { title: 'aaaa', sth: 'cccc' };

const bar = { ...foo, title: 'bbbb' };

console.log(bar.title); // => 'bbbb'