react-popper-tooltipを導入することでreact-popperとpopper.jsをベースにしたカスタムフックが利用でき、簡単にツールチップが作成できます。
今回はreact-popper-tooltipを利用してツールチップを作成する方法について紹介します。
今回利用するreact-popper-tooltipのバージョンは4.4.2です。
下準備: react-popper-tooltipのインストール
$ yarn add react-popper-tooltip
一番シンプルなツールチップの作成手順
- react-popper-tooltipのusePopperTooltipをインポート
- usePopperTooltipからgetTooltipProps、setTooltipRef、setTriggerRef、visibleを取得
- ツールチップのトリガ領域のrefにsetTooltipRefを指定
- ツールチップで表示する領域のrefにsetTooltipRef、propsにgetTooltipPropsを指定
- visibleでツールチップの表示を制御
具体的なコードは以下の通りです。
なお、今回のサンプルコードではreact-popper-tooltipで用意されているCSSを利用していますが、独自定義したCSSも適用できます。
import { FC } from "react";
import { usePopperTooltip } from "react-popper-tooltip";
import "react-popper-tooltip/dist/styles.css";
const App: FC = () => {
const {
getTooltipProps,
setTooltipRef,
setTriggerRef,
visible,
} = usePopperTooltip();
return (
<div className="App">
<button type="button" ref={setTriggerRef}>
Trigger
</button>
{visible && (
<div
ref={setTooltipRef}
{...getTooltipProps({ className: "tooltip-container" })}
>
Tooltip
</div>
)}
</div>
);
};
export default App;
代表的なオプションの紹介
react-popper-tooltipで用意されているオプションのうち代表的なものをいくつか紹介します。
オプションの詳細はreact-popper-tooltipのREADMEを参照してください。
やりたいこと | 実現方法 |
---|---|
ツールチップに矢印(吹き出し)を追加 | getArrowPropsを利用 |
チールチップの配置の変更 | placementオプションを追加 |
ツールチップの位置の微調整 | offsetオプションを追加 |
ツールチップのトリガイベントの変更 | offsetオプションを追加 |
上記のオプションを追加したサンプルコードが以下になります。
import { FC } from "react";
import { usePopperTooltip } from 'react-popper-tooltip';
import 'react-popper-tooltip/dist/styles.css';
const App: FC = () => {
const {
getTooltipProps,
setTooltipRef,
setTriggerRef,
visible,
getArrowProps,
} = usePopperTooltip({
trigger: 'click', // ツールチップの表示トリガをクリックにする
placement: 'top', // ツールチップを上に表示
offset: [15, 10], // x軸方向に15px, y軸方向に10pxのオフセットを追加
});
return (
<div className="App">
<button type="button" ref={setTriggerRef}>
Trigger
</button>
{visible && (
<div
ref={setTooltipRef}
{...getTooltipProps({ className: 'tooltip-container' })}
>
<div {...getArrowProps({ className: 'tooltip-arrow' })} />
Tooltip
</div>
)}
</div>
);
};
export default App;
さいごに
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!