A apollo client for solid
This is still under heavy development and not really "final".
Usage is very similar to the original apollo react implementation
createQuery, createLazyQuery, createMutation and createSubscription return a resource object.
The ApolloProvider should be placed early in your app
main.tsx
import { ApolloProvider, ApolloClient } from '@merged/solid-apollo'
import { render } from 'solid-js/web'
import { Suspense } from 'solid-js'
import { App } from './App'
const client = new ApolloClient({
// your client config
})
render(() => (
<ApolloProvider client={client}>
<Suspense fallback={<>App is loading…</>}>
<App />
</Suspense>
</ApolloProvider>
), document.getElementById("root"))createQuery can be typed and configured like useQuery.
createQuery creates a live query (ApolloClient.watchQuery) and will automatically update when the data gets updated.
import { gql, createQuery } from '@merged/solid-apollo'
import type { Component } from 'solid-js'
const QUERY = gql`
... your query
`
export const App: Component = () => {
const data = createQuery(QUERY)
return (
<>
<h1>Query Response:</h1>
{JSON.stringify(data())}
</>
)
}createLazyQuery can be typed and configured like useLazyQuery
import { gql, createLazyQuery } from '@merged/solid-apollo'
import type { Component } from 'solid-js'
const QUERY = gql`
... your query
`
export const App: Component = () => {
const [execute, data] = createLazyQuery(QUERY)
return (
<>
<h1>Query Response:</h1>
{JSON.stringify(data())}
<button onClick={() => execute()}>Execute</button>
</>
)
}createMutation can be typed and configured like useMutation
import { gql, createMutation } from '@merged/solid-apollo'
import type { Component } from 'solid-js'
const MUTATION = gql`
... your mutation
`
export const App: Component = () => {
const [mutate, data] = createMutation(MUTATION)
return (
<>
<h1>Mutation Response:</h1>
{JSON.stringify(data())}
<button onClick={() => mutate()}>Execute</button>
</>
)
}createSubscription can be typed and configured like useSubscription
import { gql, createSubscription } from '@merged/solid-apollo'
import type { Component } from 'solid-js'
const SUBSCRIPTION = gql`
... your subscription
`
export const App: Component = () => {
const data = createSubscription(SUBSCRIPTION)
return (
<>
<h1>Subscription Data:</h1>
{JSON.stringify(data())}
</>
)
}