🗂
Chakra UIにはuseTabsContextがある
Chakra UIのTabsは、まだドキュメントされてないが。useTabsContext
を使うことで、内部データにアクセスすることが出来るようだった。
内部APIっぽくて使って良いのか若干心配ではあるが、このPRを見ると、外部利用されることを想定しているようだ。
使い方
例えば下記のような例を考えてみる
const TabsSample = () => {
return <Tabs>
<TabList>
<Tab>1</Tab>
<Tab>2</Tab>
<Tab>3</Tab>
</TabList>
<TabPanels>
<TabPanel>1 panel</TabPanel>
<TabPanel>2 panel</TabPanel>
<TabPanel>3 panel</TabPanel>
</TabPanels>
</Tabs>
}
Contextを利用することになるので、まず<Tabs>
とその子要素を分離しよう。
const TabsInner = () => {
return <>
<TabList>
<Tab>1</Tab>
<Tab>2</Tab>
<Tab>3</Tab>
</TabList>
<TabPanels>
<TabPanel>1 panel</TabPanel>
<TabPanel>2 panel</TabPanel>
<TabPanel>3 panel</TabPanel>
</TabPanels>
</>
}
const TabsOuter = () => {
// Tabs ≒ TabsProvider
return <Tabs>
<TabsInner />
</Tabs>
}
<Tabs>
自体は表示はなく、ほとんど<TabsProvider>
と思っても差し支え無いだろう。[1]
あとは<TabsInner>
側でhooksを利用できる
const TabsInner = () => {
const { selectedIndex, focusedIndex } = useTabsContext()
return <Box>
<Box>{selectedIndex}</Box>
<Box>{focusedIndex}</Box>
<TabList>
<Tab>1</Tab>
<Tab>2</Tab>
<Tab>3</Tab>
</TabList>
<TabPanels>
<TabPanel>1 panel</TabPanel>
<TabPanel>2 panel</TabPanel>
<TabPanel>3 panel</TabPanel>
</TabPanels>
</Box>
}
まだundocumentedな上にあまり使う機会が多いものではないが、たまにレンダリングの制御関連で必要になったりするので、知っておいて損は無いだろう
Discussion