Relay
你可以将 Jotai 与 Relay 一起使用。
你需要安装 jotai-relay 和 relay-runtime。
npm install jotai-relay relay-runtime请参阅 Relay 文档,提前了解基础知识以及如何使用编译器。
atomWithQuery
Section titled “atomWithQuery”atomWithQuery 使用 fetchQuery 创建一个新的原子。
import React, { Suspense } from 'react'import { Provider, useAtom } from 'jotai'import { useHydrateAtoms } from 'jotai/utils'import { environmentAtom, atomWithQuery } from 'jotai-relay'import { Environment, Network, RecordSource, Store } from 'relay-runtime'import graphql from 'babel-plugin-relay/macro'
const myEnvironment = new Environment({ network: Network.create(async (params, variables) => { const response = await fetch('https://countries.trevorblades.com/', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ query: params.text, variables, }), }) return response.json() }), store: new Store(new RecordSource()),})
const countriesAtom = atomWithQuery( graphql` query AppCountriesQuery { countries { name } } `, () => ({}),)
const Main = () => { const [data] = useAtom(countriesAtom) return ( <ul> {data.countries.map(({ name }) => ( <li key={name}>{name}</li> ))} </ul> )}
const HydrateAtoms = ({ children }) => { useHydrateAtoms([[environmentAtom, myEnvironment]]) return children}
const App = () => { return ( <Provider> <HydrateAtoms> <Suspense fallback="Loading..."> <Main /> </Suspense> </HydrateAtoms> </Provider> )}atomWithMutation
Section titled “atomWithMutation”atomWithMutation 使用 commitMutation 创建一个新的原子。
FIXME: add code example and codesandbox
atomWithSubscription
Section titled “atomWithSubscription”atomWithSubscription 使用 requestSubscription 创建一个新的原子。
FIXME: add code example and codesandbox