在 React 中再次单击时关闭工具提示

Close tooltip when clicking again on it in React

我创建了一个工具提示,当单击按钮时它会打开。

再次点击按钮应该会关闭,但好像不起作用,只有在外面某处点击时才会关闭。

这是代码:

import React, { useState } from 'react';
import Tooltip from '@material-ui/core/Tooltip';
import ClickAwayListener from '@material-ui/core/ClickAwayListener';
import Button from '@material-ui/core/Button';

const MyClass = () => {
  const [open, setOpen] = useState(false);

  const handleTooltipClose = () => {
    setOpen(false);
  };

  const handleTooltipOpen = () => {
    setOpen(true);
  };

  return (
    <React.Fragment>
      <ClickAwayListener onClickAway={handleTooltipClose}>
        <div>
          <Tooltip
            PopperProps={{
              disablePortal: true
            }}
            onClose={handleTooltipClose}
            open={open}
            disableFocusListener
            disableHoverListener
            disableTouchListener
            title="Add">
            <Button onClick={handleTooltipOpen}>Click</Button>
          </Tooltip>
        </div>
      </ClickAwayListener>
    </React.Fragment>
  );
};

export default MyClass;

确保在有子按钮时使用 stopPropagation and preventDefault

const handleTooltipClose = (e) => {
  e.stopPropagation();
  e.preventDefault();
  setOpen(false);
};

const handleTooltipOpen = (e) => {
  e.stopPropagation();
  e.preventDefault();
  setOpen(true);
};

The event continues to propagate as usual, unless one of its event listeners calls stopPropagation() or stopImmediatePropagation(), either of which terminates propagation at once.

只需像这样重写您的 handleTooltipOpen 函数:

const handleTooltipOpen = () => {
          if( open ){
            setOpen(false);
          }else{
             setOpen(true)
          }
 };

所以按钮不应该打开工具提示,而是切换它。 该按钮可以触发 toggleTooltip 函数

<Button onClick={toggleTooltip}>Click</Button>

toggleTooltip 函数看起来像

const toggleTooltip= () => {
    setOpen(!open);
  };

open 状态设置为与当前相反的状态。