[React+Tailwind] Flowbite で ButtonGroup を表示してみる | 心を無にして始める React
準備
Flowbite が使えるプロジェクトを準備します。
ButtonGroup コンポーネントをつくる
./src/components 配下の Button.js を編集していきます。(前回のやつベース)
import { forwardRef } from 'react';
import { Button as FlowbiteButton } from 'flowbite-react';
const Button = forwardRef((
{
children,
color,
gradientDuoTone,
gradientMonochrome,
href,
label,
outline = false,
pill = false,
positionInGroup,
size,
...otherProps
},
ref,
) => {
return (
<FlowbiteButton
color={color}
gradientDuoTone={gradientDuoTone}
gradientMonochrome={gradientMonochrome}
href={href}
label={label}
outline={outline}
pill={pill}
positionInGroup={positionInGroup}
ref={ref}
size={size}
{...otherProps}
>
{children}
</FlowbiteButton>
);
});
const ButtonGroup = forwardRef((
{
children,
outline = false,
pill = false,
...otherProps
},
ref,
) => {
return (
<FlowbiteButton.Group
outline={outline}
pill={pill}
ref={ref}
{...otherProps}
>
{children}
</FlowbiteButton.Group>
);
});
export default Object.assign(Button, {
Group: ButtonGroup,
});
ButtonGroup コンポーネントをつかう
いつものように App.js を編集していきます。
import Button from './components/Button.js';
import './App.css';
function App() {
return (
<div className="dark">
<div className="h-screen p-8 flex flex-col justify-center items-center dark:!bg-gray-900">
<div className="flex gap-3">
<Button.Group>
<Button color="gray">
Profile
</Button>
<Button color="gray">
Settings
</Button>
<Button color="gray">
Messages
</Button>
</Button.Group>
<Button.Group>
<Button gradientMonochrome="info">
Profile
</Button>
<Button gradientMonochrome="info">
Settings
</Button>
<Button gradientMonochrome="info">
Messages
</Button>
</Button.Group>
<Button.Group>
<Button gradientDuoTone="cyanToBlue">
Profile
</Button>
<Button gradientDuoTone="cyanToBlue">
Settings
</Button>
<Button gradientDuoTone="cyanToBlue">
Messages
</Button>
</Button.Group>
</div>
<div className="mt-4 flex gap-3">
<Button.Group outline={true}>
<Button color="gray">
Profile
</Button>
<Button color="gray">
Settings
</Button>
<Button color="gray">
Messages
</Button>
</Button.Group>
<Button.Group outline={true}>
<Button gradientMonochrome="info">
Profile
</Button>
<Button gradientMonochrome="info">
Settings
</Button>
<Button gradientMonochrome="info">
Messages
</Button>
</Button.Group>
<Button.Group outline={true}>
<Button gradientDuoTone="cyanToBlue">
Profile
</Button>
<Button gradientDuoTone="cyanToBlue">
Settings
</Button>
<Button gradientDuoTone="cyanToBlue">
Messages
</Button>
</Button.Group>
</div>
</div>
</div>
);
}
export default App;
結果
はい、できました。