【问题标题】:Add Tooltip over a button在按钮上添加工具提示
【发布时间】:2021-10-10 22:50:52
【问题描述】:

我正在尝试创建一个按钮,该按钮使用 TypeScript 和 Material-UI 从变量复制到剪贴板内容。我试过这个:

const [copySuccess, setCopySuccess] = useState('');

const copyToClipBoard = async (text: string) => {
    try {
        await navigator.clipboard.writeText(copyMe);
        setCopySuccess('Copied!');
    } catch (err) {
        setCopySuccess('Failed to copy!');
    }
};

调用上述代码的按钮:

<Button                                    
    onClick={() => copyToClipBoard('some text to copy')}
>
    Copy Url
</Button>

您知道如何在按钮上添加 Tooltip https://mui.com/components/tooltips/ 以在复制文本时显示复制成功的消息吗?

【问题讨论】:

  • 您为什么决定将 copySuccess 变量设为字符串?在这种情况下,布尔值不是更直观吗?
  • 因为不同的按钮我需要复制不同的消息。

标签: javascript reactjs material-ui


【解决方案1】:

您可以使用 MUI 工具提示的 controlled version 手动打开和关闭某些事件的工具提示。

更新后的代码可能如下所示,以显示和隐藏工具提示。

import * as React from "react";
import Button from "@mui/material/Button";
import Tooltip from "@mui/material/Tooltip";

export default function ControlledTooltips() {
  const [open, setOpen] = React.useState(false);
  const [copyFeedback, setCopyFeedback] = React.useState("");
  const handleClose = () => {
    setOpen(false);
  };

  const copyToClipBoard = async (text) => {
    try {
      await navigator.clipboard.writeText(text);
      setCopyFeedback("Copied Successfully");
      setOpen(true);
    } catch (err) {
      console.log("INSIDE ", { open }, err);
      setCopyFeedback("Failed to copy. Please check browser persmissions");
      setOpen(true);
    }
  };

  return (
    <Tooltip
      open={open}
      onClose={handleClose}
      title={copyFeedback}
      leaveDelay={500}
    >
      <Button onClick={() => copyToClipBoard("Text to Copy")}>
        Controlled
      </Button>
    </Tooltip>
  );
}

sandbox

【讨论】:

  • 我有一个小要求。当我按下按钮时,如何将按钮标签从“受控”更改为“已复制”?
  • @PeterPenzov 您可以使用 open 属性更改按钮标签。例如像这样{open ? "Copied" : "Controlled"}Sandbox 已更新。请查看。
  • 我发现了一个问题。我用几个按钮测试了代码。当我单击一个按钮时,所有工具提示都可见并且按钮被按下。你知道如何解决这个问题吗?
  • @PeterPenzov 我更新了sandbox。其中一种方法是,我们可以为每个按钮保存一个特定的标识符,并使用它来打开特定按钮的工具提示,而不是使用布尔值来打开提示。我使用了一些简单的方法来展示它是如何工作的,但是如果您有很长的按钮列表,您可以创建一个数组并映射该数组以生成重复标记。
  • 感谢您的修复。
猜你喜欢
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 1970-01-01
  • 2014-10-09
  • 2023-01-22
  • 2015-07-16
  • 1970-01-01
相关资源
最近更新 更多