[React+Tailwind] Flowbite で Toast を表示してみる | 心を無にして始める React
準備
Flowbite が使えるプロジェクトを準備します。
Toast コンポーネントをつくる
./src/components 配下に Toast.js を作ります。
import React, { forwardRef } from 'react';
import {
Toast as FlowbiteToast,
} from 'flowbite-react';
const Toast = forwardRef((
{
children,
duration,
...otherProps
},
ref,
) => {
return (
<FlowbiteToast
duration={duration}
{...otherProps}
>
{children}
</FlowbiteToast>
);
});
const ToastToggle = forwardRef((
{
children,
xIcon,
...otherProps
},
ref,
) => {
return (
<FlowbiteToast.Toggle
xIcon={xIcon}
ref={ref}
{...otherProps}
>
{children}
</FlowbiteToast.Toggle>
);
});
export default Object.assign(Toast, {
Toggle: ToastToggle,
});
Toast コンポーネントをつかう
いつものように App.js を編集していきます。
import { ArrowPathIcon } from '@heroicons/react/24/solid';
import './App.css';
import Toast from './components/Toast';
import Button from './components/Button';
function App() {
return (
<div className="min-h-screen w-full gap-4 flex flex-col justify-center items-center dark:text-white dark:!bg-gray-900">
<Toast>
<div className="flex !items-start">
<div className="inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-blue-100 text-blue-500 dark:bg-blue-900 dark:text-blue-300">
<ArrowPathIcon className="h-5 w-5" />
</div>
<div className="ml-3 text-sm font-normal">
<span className="mb-1 text-sm font-semibold text-gray-900 dark:text-white">
Update available
</span>
<div className="mb-2 text-sm font-normal">
A new software version is available for download.
</div>
<div className="flex gap-2">
<div className="w-full">
<Button size="xs">
Update
</Button>
</div>
<div className="w-full">
<Button
color="light"
size="xs"
>
Not now
</Button>
</div>
</div>
</div>
<Toast.Toggle />
</div>
</Toast>
</div>
);
}
export default App;
結果
はい、できました。