What is react-popper?
The react-popper package is a React wrapper around the Popper.js library, which is a positioning engine to ensure popovers, tooltips, and similar floating elements are positioned correctly relative to their reference elements, even in complex scenarios like inside scrolling containers or when the viewport size changes. It provides a set of React hooks and components to integrate Popper.js functionality in a React-friendly way.
What are react-popper's main functionalities?
Tooltip positioning
This code demonstrates how to use the `usePopper` hook to create a tooltip that is positioned relative to a button. The tooltip's position is automatically updated to ensure it remains correctly placed relative to the button, even if the layout changes.
{"import React from 'react';\nimport { usePopper } from 'react-popper';\n\nfunction Tooltip() {\n const [referenceElement, setReferenceElement] = useState(null);\n const [popperElement, setPopperElement] = useState(null);\n const { styles, attributes } = usePopper(referenceElement, popperElement);\n\n return (\n <>\n <button ref={setReferenceElement}>Hover over me</button>\n <div ref={setPopperElement} style={styles.popper} {...attributes.popper}>\n Tooltip content\n </div>\n </>\n );\n}"}
Dropdown menu
This example shows how to create a dropdown menu using `usePopper`. The dropdown's visibility is toggled by clicking a button, and its position is dynamically adjusted to stay aligned with the button.
{"import React, { useState } from 'react';\nimport { usePopper } from 'react-popper';\n\nfunction Dropdown() {\n const [referenceElement, setReferenceElement] = useState(null);\n const [popperElement, setPopperElement] = useState(null);\n const [visible, setVisible] = useState(false);\n const { styles, attributes } = usePopper(referenceElement, popperElement);\n\n return (\n <>\n <button ref={setReferenceElement} onClick={() => setVisible(!visible)}>Toggle Dropdown</button>\n {visible && (\n <div ref={setPopperElement} style={styles.popper} {...attributes.popper}>\n Dropdown content\n </div>\n )}\n </>\n );\n}"}
Other packages similar to react-popper
tippy.js
Tippy.js is a highly customizable tooltip and popover library that wraps around Popper.js, similar to react-popper but with a broader focus on tooltips and popovers. It offers a wide range of animations, themes, and interactive options out of the box, making it more feature-rich for specific tooltip and popover use cases compared to the more general positioning capabilities of react-popper.
floating-ui
Floating UI is the successor to Popper.js and offers direct React integration through its own React package. It provides low-level primitives for positioning floating elements, similar to react-popper, but with an updated API and additional features to handle more complex positioning scenarios. It's a more modern alternative with active development focusing on addressing limitations found in Popper.js.
React Popper
React wrapper around Popper.
important note: Popper is not a tooltip library, it's a positioning
engine to be used to build features such as (but not restricted to) tooltips.
Install
Via package managers:
npm i react-popper @popperjs/core
yarn add react-popper @popperjs/core
Note: @popperjs/core
must be installed in your project in order for
react-popper
to work.
Via script
tag (UMD library exposed as ReactPopper
):
<script src="https://unpkg.com/react-popper/dist/index.umd.js"></script>
Documentation
The full documentation can be found on the official Popper website:
http://popper.js.org/react-popper
Running Locally
clone repo
git clone git@github.com:popperjs/react-popper.git
move into folder
cd ~/react-popper
install dependencies
npm install
or yarn
run dev mode
npm run demo:dev
or yarn demo:dev
open your browser and visit:
http://localhost:1234/