当前位置:首页 > React

React如何写popover

2026-03-11 01:10:13React

React 实现 Popover 的方法

使用 Material-UI 的 Popover 组件

Material-UI 提供了现成的 Popover 组件,可以直接使用。需要安装 @mui/material@emotion 相关依赖。

React如何写popover

import React from 'react';
import Popover from '@mui/material/Popover';
import Button from '@mui/material/Button';

function BasicPopover() {
  const [anchorEl, setAnchorEl] = React.useState(null);

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

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

  const open = Boolean(anchorEl);
  const id = open ? 'simple-popover' : undefined;

  return (
    <div>
      <Button aria-describedby={id} variant="contained" onClick={handleClick}>
        Open Popover
      </Button>
      <Popover
        id={id}
        open={open}
        anchorEl={anchorEl}
        onClose={handleClose}
        anchorOrigin={{
          vertical: 'bottom',
          horizontal: 'left',
        }}
      >
        <div style={{ padding: '16px' }}>
          This is the content of the Popover.
        </div>
      </Popover>
    </div>
  );
}

export default BasicPopover;

使用自定义组件实现 Popover

如果需要完全自定义 Popover,可以通过状态管理和 CSS 定位实现。

React如何写popover

import React, { useState, useRef } from 'react';

function CustomPopover() {
  const [isOpen, setIsOpen] = useState(false);
  const anchorRef = useRef(null);

  const togglePopover = () => {
    setIsOpen(!isOpen);
  };

  const closePopover = () => {
    setIsOpen(false);
  };

  return (
    <div style={{ position: 'relative', display: 'inline-block' }}>
      <button ref={anchorRef} onClick={togglePopover}>
        Toggle Popover
      </button>
      {isOpen && (
        <div
          style={{
            position: 'absolute',
            top: '100%',
            left: 0,
            backgroundColor: 'white',
            border: '1px solid #ddd',
            padding: '8px',
            borderRadius: '4px',
            boxShadow: '0 2px 4px rgba(0,0,0,0.1)',
            zIndex: 1000,
          }}
        >
          <div>Custom Popover Content</div>
          <button onClick={closePopover}>Close</button>
        </div>
      )}
    </div>
  );
}

export default CustomPopover;

使用 Reactstrap 的 Popover 组件

Reactstrap 是 Bootstrap 的 React 实现,也提供了 Popover 组件。

import React, { useState } from 'react';
import { Button, Popover, PopoverHeader, PopoverBody } from 'reactstrap';

function ReactstrapPopover() {
  const [popoverOpen, setPopoverOpen] = useState(false);

  const toggle = () => setPopoverOpen(!popoverOpen);

  return (
    <div>
      <Button id="Popover1" type="button">
        Launch Popover
      </Button>
      <Popover
        placement="bottom"
        isOpen={popoverOpen}
        target="Popover1"
        toggle={toggle}
      >
        <PopoverHeader>Popover Title</PopoverHeader>
        <PopoverBody>Popover content goes here.</PopoverBody>
      </Popover>
    </div>
  );
}

export default ReactstrapPopover;

使用第三方库 react-tiny-popover

react-tiny-popover 是一个轻量级的 Popover 库,适合简单场景。

import React, { useState } from 'react';
import { Popover } from 'react-tiny-popover';

function TinyPopover() {
  const [isPopoverOpen, setIsPopoverOpen] = useState(false);

  return (
    <Popover
      isOpen={isPopoverOpen}
      positions={['bottom', 'top', 'left', 'right']}
      content={<div style={{ padding: '8px' }}>Popover Content</div>}
    >
      <button onClick={() => setIsPopoverOpen(!isPopoverOpen)}>
        Click Me
      </button>
    </Popover>
  );
}

export default TinyPopover;

注意事项

  • 定位问题:Popover 的定位需要根据触发元素的位置动态调整,避免超出视口。
  • 事件处理:点击 Popover 外部时通常需要关闭 Popover,可以通过监听全局点击事件实现。
  • 无障碍支持:确保 Popover 的触发元素和内容有正确的 ARIA 属性,例如 aria-haspopuparia-expanded

以上方法可以根据项目需求选择,Material-UI 和 Reactstrap 适合复杂场景,而自定义实现或轻量级库适合简单需求。

标签: 如何写React
分享给朋友:

相关文章

如何写react 组件

如何写react 组件

创建 React 组件的基本方法 React 组件可以通过函数式组件或类组件两种方式创建。以下是具体实现方法: 函数式组件 函数式组件是当前推荐的方式,简洁且支持 Hooks。 impor…

React如何保持登录状态

React如何保持登录状态

使用本地存储(localStorage/sessionStorage) 将用户登录凭证(如token)存储在浏览器的localStorage或sessionStorage中。localStorage持…

React如何写popover

React如何写popover

使用React创建Popover React中实现Popover可以通过多种方式,包括使用第三方库或自定义组件。以下是几种常见方法: 使用Material-UI库 Material-UI提供了现成的…

react插件如何写

react插件如何写

React 插件开发基础 React 插件通常以 npm 包形式发布,核心是通过封装可复用的组件或逻辑供其他项目调用。需要遵循 React 组件设计规范,并考虑兼容性、性能优化和文档完整性。 项目初…

React如何开发大型项目

React如何开发大型项目

React开发大型项目的关键方法 模块化与组件拆分 将UI拆分为可复用的独立组件,遵循单一职责原则。使用容器组件管理状态,展示组件处理UI渲染。结合Atomic Design或类似方法论组织组件层级。…

react如何写小程序

react如何写小程序

React 开发小程序的方法 React 本身是为 Web 应用设计的,但可以通过以下方式开发小程序: 使用 Taro 框架 Taro 是一个多端统一开发框架,支持使用 React 语法开发小程序(…