Reactでチェックを入れたCheckboxの一覧を取得する方法を調べてみたのですが、実装がごちゃごちゃのサンプルコードばかりで参考になりませんでした。
現在開発しているプロジェクトでは自分が最も好きなCSSフレームワークのChakra UIを取り入れていて、Chakra UIはカスタムフックもいくつか提供しているので、今回使えそうなカスタムフックが無いか探してみたところuseCheckboxGroup
というものを見つけたので実装方法をご紹介します。
公式ドキュメントはこちら
実装方法
import { Flex, Text, Stack, Checkbox, useCheckboxGroup } from "@chakra-ui/react"
const App = () => {
const manufacturers = ["Honda", "Yamaha", "Kawasaki", "Suzuki"]
const { getCheckboxProps, value: checkedItems } = useCheckboxGroup()
return (
<Flex minH="100vh" alignItems="center" justifyContent="center" flexDirection="column">
<Stack spacing={5} direction="row">
{manufacturers.map((manufacturer, idx) => {
return <Checkbox key={idx} {...getCheckboxProps({ value: manufacturer })}>{manufacturer}</Checkbox>
})}
</Stack>
<Text>Checked: {JSON.stringify(checkedItems)}</Text>
</Flex>
)
}
export default App
このようなソースを書いてみました。これを表示すると
こんな感じで国内バイクメーカーのCheckboxが羅列され、チェックを入れると変更がcheckedItems
に反映されて下のChecked:
の表示が変わります。(デフォルトのvalue
だと分かりにくいのでcheckedItems
にリネームしています)
チェックした順番でcheckedItems
にアイテムがプッシュされます。
余談
今話題のChatGPTにuseCheckboxGroupの使い方を尋ねてみました。
useCheckboxGroupはisCheckedなんていうプロパティーは返さないのですが、中々惜しいところまではいけてます。
ですがそんなことより、とあるSPAフレームワークで使える、とあるCSSフレームワークについてくるカスタムフックの使い方もこのようにちょこっと質問するだけでこの精度で答えられることに驚きました。
そのうち我々のようなWebエンジニアの居場所も無くなるのでしょうか。
コメント