Skip to content

Instantly share code, notes, and snippets.

@gasatrya
Last active November 22, 2023 15:36
Show Gist options
  • Save gasatrya/66f838e1a2a3d4d09ed0b16330259cd4 to your computer and use it in GitHub Desktop.
Save gasatrya/66f838e1a2a3d4d09ed0b16330259cd4 to your computer and use it in GitHub Desktop.
Radix UI Tabs URL based in next.js
import React from "react";
import { useRouter } from "next/router";
import * as Tabs from "@radix-ui/react-tabs";
const TabsDemo = () => {
const router = useRouter();
const initialTab = router.query.tab;
const [activeTab, setActiveTab] = React.useState(initialTab || "tab1");
const handleTabChange = (value) => {
//update the state
setActiveTab(value);
// update the URL query parameter
router.push({ query: { tab: value } });
};
// if the query parameter changes, update the state
React.useEffect(() => {
setActiveTab(router.query.tab);
}, [router.query.tab]);
return (
<Tabs.Root
value={activeTab}
defaultValue="tab1"
onValueChange={handleTabChange}
>
<Tabs.List>
<Tabs.Trigger value="tab1">Tab 1</Tabs.Trigger>
<Tabs.Trigger value="tab2">Tab 2</Tabs.Trigger>
<Tabs.Trigger value="tab3">Tab 3</Tabs.Trigger>
</Tabs.List>
<Tabs.Content value="tab1">Tab 1 content</Tabs.Content>
<Tabs.Content value="tab2">Tab 2 content</Tabs.Content>
<Tabs.Content value="tab3">Tab 3 content</Tabs.Content>
</Tabs.Root>
);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment