Skip to main content
Glama
jotai-state.tsx2.02 kB
import { atom, useAtom } from "jotai"; import { atomWithStorage } from "jotai/utils"; // ============================================ // Atoms // ============================================ // Primitive Atoms export const countAtom = atom(0); export const textAtom = atom("hello"); // Derived Atoms (Computed) export const doubleCountAtom = atom((get) => get(countAtom) * 2); export const uppercaseTextAtom = atom( (get) => get(textAtom).toUpperCase(), (get, set, newText: string) => set(textAtom, newText.toLowerCase()), // Writeable derived atom ); // Persisted Atom (localStorage) export const themeAtom = atomWithStorage<"light" | "dark">("theme", "light"); // Async Atom export const usersAtom = atom(async () => { const res = await fetch("https://jsonplaceholder.typicode.com/users"); return await res.json(); }); // Action Atoms (Write-only) export const incrementCountAtom = atom( null, // getter (null = write-only) (get, set) => set(countAtom, get(countAtom) + 1), ); // ============================================ // Components // ============================================ export const Counter = () => { const [count, setCount] = useAtom(countAtom); const [doubleCount] = useAtom(doubleCountAtom); return ( <div> <h1>Count: {count} </h1> <h2> Double: {doubleCount} </h2> <button onClick={() => setCount((c) => c + 1)}> Increment </button> </div> ); }; export const ThemeToggle = () => { const [theme, setTheme] = useAtom(themeAtom); return ( <button onClick={() => setTheme(theme === "light" ? "dark" : "light")} style={{ background: theme === "dark" ? "#333" : "#fff", color: theme === "dark" ? "#fff" : "#000", }} > Current Theme: {theme} </button> ); }; export const UserList = () => { // Jotai Suspense support const [users] = useAtom(usersAtom); return ( <ul> {users.map((user: any) => ( <li key={user.id}> {user.name} </li> ))} </ul> ); };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/millsydotdev/Code-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server