JotaiJotai

状態
Primitive and flexible state management for React

tRPC

You can use Jotai with tRPC.

Install

You have to install jotai-trpc, @trpc/client and @trpc/server to use the extension.

npm i jotai-trpc @trpc/client @trpc/server

Usage

import { createTRPCJotai } from 'jotai-trpc'
const trpc = createTRPCJotai<MyRouter>({
links: [
httpLink({
url: myUrl,
}),
],
})
const idAtom = atom('foo')
const queryAtom = trpc.bar.baz.atomWithQuery((get) => get(idAtom))

atomWithQuery

...atomWithQuery creates a new atom with "query". It internally uses Vanilla Client's ...query procedure.

import { atom, useAtom } from 'jotai'
import { httpLink } from '@trpc/client'
import { createTRPCJotai } from 'jotai-trpc'
import { trpcPokemonUrl } from 'trpc-pokemon'
import type { PokemonRouter } from 'trpc-pokemon'
const trpc = createTRPCJotai<PokemonRouter>({
links: [
httpLink({
url: trpcPokemonUrl,
}),
],
})
const NAMES = [
'bulbasaur',
'ivysaur',
'venusaur',
'charmander',
'charmeleon',
'charizard',
'squirtle',
'wartortle',
'blastoise',
]
const nameAtom = atom(NAMES[0])
const pokemonAtom = trpc.pokemon.byId.atomWithQuery((get) => get(nameAtom))
const Pokemon = () => {
const [data, refresh] = useAtom(pokemonAtom)
return (
<div>
<div>ID: {data.id}</div>
<div>Height: {data.height}</div>
<div>Weight: {data.weight}</div>
<button onClick={refresh}>Refresh</button>
</div>
)
}

Examples

atomWithMutation

...atomWithMutation creates a new atom with "mutate". It internally uses Vanilla Client's ...mutate procedure.

FIXME: add code example and codesandbox

atomWithSubscription

...atomWithSubscription creates a new atom with "subscribe". It internally uses Vanilla Client's ...subscribe procedure.

FIXME: add code example and codesandbox