首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Material UI中制作箭头对话框

在Material UI中制作箭头对话框,可以使用Tooltip组件和Popover组件来实现。

首先,引入所需的组件和样式:

代码语言:txt
复制
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Tooltip from '@material-ui/core/Tooltip';
import Popover from '@material-ui/core/Popover';

然后,创建一个样式对象:

代码语言:txt
复制
const useStyles = makeStyles((theme) => ({
  arrowBox: {
    position: 'relative',
    display: 'inline-block',
    margin: theme.spacing(2),
  },
  arrow: {
    position: 'absolute',
    width: 0,
    height: 0,
    borderLeft: '10px solid transparent',
    borderRight: '10px solid transparent',
    borderBottom: '10px solid #000',
    top: '-10px',
    left: '50%',
    transform: 'translateX(-50%)',
  },
  content: {
    padding: theme.spacing(2),
  },
}));

接下来,创建一个箭头对话框组件:

代码语言:txt
复制
const ArrowDialog = () => {
  const classes = useStyles();
  const [anchorEl, setAnchorEl] = React.useState(null);

  const handleClick = (event) => {
    setAnchorEl(event.currentTarget);
  };

  const handleClose = () => {
    setAnchorEl(null);
  };

  const open = Boolean(anchorEl);
  const id = open ? 'arrow-dialog' : undefined;

  return (
    <div className={classes.arrowBox}>
      <Tooltip title="点击显示对话框">
        <div onClick={handleClick}>
          <div className={classes.arrow}></div>
        </div>
      </Tooltip>
      <Popover
        id={id}
        open={open}
        anchorEl={anchorEl}
        onClose={handleClose}
        anchorOrigin={{
          vertical: 'bottom',
          horizontal: 'center',
        }}
        transformOrigin={{
          vertical: 'top',
          horizontal: 'center',
        }}
      >
        <div className={classes.content}>
          这是一个箭头对话框的内容。
        </div>
      </Popover>
    </div>
  );
};

最后,将箭头对话框组件添加到需要显示的位置:

代码语言:txt
复制
const App = () => {
  return (
    <div>
      <ArrowDialog />
    </div>
  );
};

以上代码使用了Material UI的Tooltip组件和Popover组件来创建一个带有箭头的对话框。点击箭头时,对话框会弹出显示内容。你可以根据需要自定义样式和内容。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

依赖什么啊?依赖注入……,什么注入啊?

在过去的几个月里,我和客户团队在对一个设计系统进行优化。表面上看起来这个优化工作包括两大部分:性能优化和结构重整。不过经过这几个月对十多个组件的重构之后,我们发现这两部分工作在很大程度上是同一件事的两个方面:好的设计往往可以带来更好的性能,反之亦然。这是一个非常有趣的发现,我们在讨论性能优化的时候,一个经常被忽略的因素恰恰是软件本身的设计。我们会关注文件大小,是否会有多重渲染,甚至一些细节如CSS selector的优先级等等,但是很少为了性能而审视代码的设计。另一方面,如果一个组件写的不符合S.O.L.I.D原则,我们会认为它的可扩展性不够好,或者由于文件体量过大,且职责不清而变得难以维护,但是往往不会认为糟糕的设计会对性能造成影响(也可能是由于性能总是在实现已经完成之后才被注意到)。为了更好的说明这个问题,以及如何在实践中修改我们的设计,使得代码更可能具有比较优秀的性能,我们可以一起讨论几个典型的例子。

02

《精通react/vue组件设计》之5分钟实现一个Tag(标签)组件和Empty(空状态)组件

本文是笔者写组件设计的第五篇文章,之所以会写组件设计相关的文章,是因为作为一名前端优秀的前端工程师,面对各种繁琐而重复的工作,我们不应该按部就班的去"辛勤劳动",而是要根据已有前端的开发经验,总结出一套自己的高效开发的方法.作为数据驱动的领导者react/vue等MVVM框架的出现,帮我们减少了工作中大量的冗余代码, 一切皆组件的思想深得人心.所以, 为了让工程师们有更多的时间去考虑业务和产品迭代,我们不得不掌握高质量组件设计的思路和方法.所以笔者将花时间去总结各种业务场景下的组件的设计思路和方法,并用原生框架的语法去实现各种常用组件的开发,希望等让前端新手或者有一定工作经验的朋友能有所收获.

02
领券