JotaiJotai

Jotai
React 原始而灵活的状态管理

tRPC

你可以将 Jotai 与 tRPC 一起使用。

安装

要使用此扩展,你需要安装 jotai-trpc@trpc/client@trpc/server

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

使用方法

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 创建了一个带有 "query" 的新 atom。它内部使用 Vanilla Client...query 程序。

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>高度: {data.height}</div>
<div>重量: {data.weight}</div>
<button onClick={refresh}>刷新</button>
</div>
)
}

示例

atomWithMutation

...atomWithMutation 创建了一个带有 "mutate" 的新 atom。它内部使用 Vanilla Client...mutate 程序。

FIXME: 添加代码示例和 codesandbox

atomWithSubscription

...atomWithSubscription 创建了一个带有 "subscribe" 的新 atom。它内部使用 Vanilla Client...subscribe 程序。

FIXME: 添加代码示例和 codesandbox