<apollo-query> lets you query GraphQL without writing any JavaScript. Import the custom element then write your template, query, and variables in HTML. The element class inherits from ApolloQueryInterface
This page has detailed API documentation for <apollo-query>. See the <apollo-query> HTML Element guide for a HOW-TO guide.
Live Demo
<apollo-client>
<apollo-query>
<script type="application/graphql" src="Friends.query.graphql"></script>
<template>
<link rel="stylesheet" href="Friends.css"/>
<h1>Friends</h1>
<p>Hello, {{ data.me.name }}. Here are your friends.</p>
<ul>
<template type="repeat" repeat="{{ data.friends ?? [] }}">
<li data-id="{{ item.id }}"
data-index="{{ index }}">
<figure>
<img .src="{{ item.picture }}" role="presentation">
<figcaption>{{ item.name }}</figcaption>
</figure>
</li>
</template>
</ul>
</template>
</apollo-query>
</apollo-client>
<script type="module" src="client.js"></script>Render a GraphQL query to the DOM
Examples
<apollo-query>
<script type="application/graphql">
query MyProfile {
profile { name picture }
}
</script>
<template>
<img loading="lazy" src="{{ data.profile.picture }}" alt="{{ data.profile.name }}"/>
</template>
</apollo-query>
<apollo-query id="query-element" template="avatar-template"></apollo-query>
<template id="avatar-template">
<img loading="lazy" src="{{ data.profile.picture }}" alt="{{ data.profile.name }}"/>
</template>
<script type="module">
import { gql } from '@apollo/client/core';
const el = document.getElementById('query-element');
el.query = gql`
query MyProfile($size: Int) {
profile { name picture(size: $size) }
}
`;
el.variables = { size: 48 };
</script>
Properties
is
static(read-only)stringcontroller
ApolloController<D, V>canAutoSubscribe
booleanoptions
ApolloQueryControllerOptions<D, V>| Option | Type | Description |
|---|---|---|
| fetchPolicy | WatchQueryFetchPolicy |
The fetchPolicy for the query. |
| variables | Variables<D, V> |
Variables for the query. |
| noAutoSubscribe | boolean |
If true, the element will not begin querying data until you manually call subscribe |
| shouldSubscribe | (op?: Partial<Operation<D, V>>) => boolean |
Determines whether the element should attempt to subscribe automatically\nOverride to prevent subscribing unless your conditions are met |
| onData | (data: Data<D>) => void |
Optional callback for when a query resolves. |
| onError | (error: Error) => void |
Optional callback for when an error occurs. |
Inherits from ApolloControllerOptions
networkStatus
networkStatus is useful if you want to display a different loading indicator (or no indicator at all)
depending on your network status as it provides a more detailed view into the state of a network request
on your component than loading does. networkStatus is an enum with different number values between 1 and 8.
These number values each represent a different network state.
loading: The query has never been run before and the request is now pending. A query will still have this network status even if a result was returned from the cache, but a query was dispatched anyway.setVariables: If a query’s variables change and a network request was fired then the network status will be setVariables until the result of that query comes back. React users will see this when options.variables changes on their queries.fetchMore: Indicates that fetchMore was called on this query and that the network request created is currently in flight.refetch: It means that refetch was called on a query and the refetch request is currently in flight.- Unused.
poll: Indicates that a polling query is currently in flight. So for example if you are polling a query every 10 seconds then the network status will switch to poll every 10 seconds whenever a poll request has been sent but not resolved.ready: No request is in flight for this query, and no errors happened. Everything is OK.error: No request is in flight for this query, but one or more errors were detected.
If the network status is less then 7 then it is equivalent to loading being true. In fact you could
replace all of your loading checks with networkStatus < 7 and you would not see a difference.
It is recommended that you use loading, however.
query
null | ComponentDocument<D, V>context
Record<string, any> | undefinedpartial
booleanpartialRefetch
boolean | undefinedIf true, perform a query refetch if the query result is marked as being partial, and the returned data is reset to an empty Object by the Apollo Client QueryManager (due to a cache miss).
The default value is false for backwards-compatibility’s sake, but should be changed to true for most use-cases.
pollInterval
number | undefinedreturnPartialData
boolean | undefinednoAutoSubscribe
booleansubscribe() method to do so.notifyOnNetworkStatusChange
booleanerrorPolicy
ErrorPolicy | undefinederrorPolicy determines the level of events for errors in the execution result. The options are:
none(default): any errors from the request are treated like runtime errors and the observable is stopped (XXX this is default to lower breaking changes going from AC 1.0 => 2.0)ignore: errors from the request do not stop the observable, but also don’t callnextall: errors are treated like data and will notify observables
fetchPolicy
WatchQueryFetchPolicy | undefinedDetermines where the client may return a result from. The options are:
cache-first(default): return result from cache, fetch from network if cached result is not available.cache-and-network: return result from cache first (if it exists), then return network result once it’s available.cache-only: return result from cache if available, fail otherwise.no-cache: return result from network, fail if network call doesn’t succeed, don’t save to cachenetwork-only: return result from network, fail if network call doesn’t succeed, save to cachestandby: only for queries that aren’t actively watched, but should be available for refetch and updateQueries.
nextFetchPolicy
WatchQueryFetchPolicy | NextFetchPolicyFunction<D, V> | undefinedcache-and-network or network-only.When someone chooses cache-and-network or network-only as their
initial FetchPolicy, they often do not want future cache updates to
trigger unconditional network requests, which is what repeatedly
applying the cache-and-network or network-only policies would seem
to imply. Instead, when the cache reports an update after the
initial network request, it may be desirable for subsequent network
requests to be triggered only if the cache result is incomplete.
The nextFetchPolicy option provides a way to update
options.fetchPolicy after the intial network request, without
having to set options.readyToReceiveDocument
booleanclient
ApolloClient<NormalizedCacheObject> | nullloading
booleandata
Data<D> | nulldocument
ComponentDocument<D, V> | nullDocumentNodeerror
Error | ApolloError | nullerrors
readonly GraphQLError[]variables
Variables<D, V> | nulltemplateHandlers
TemplateHandlerstemplate
(read-only)HTMLTemplateElement | nullTemplate element to render. Can either be a light-DOM child of the element,
or referenced by ID with the template attribute.
Methods
refetch
publicasyncExposes theObservableQuery#refetch method.Parameters
variables
Variables<D, V>Returns
Promise<ApolloQueryResult<Data<D>>>| Property | Type | Description |
|---|---|---|
| data | Data<D> |
If the query resolved, the data. |
| error | ApolloError |
If the query rejected, the error. |
| errors | readonly GraphQLError[] |
If the query returned partials results, and some were errors, the list of errors. |
| loading | boolean |
Whether the operation is in-flight. |
| partial | boolean |
Whether the query returned partial data. |
| networkStatus | NetworkStatus |
See NetworkStatus. |
subscribe
publicResets the observableQuery and subscribes.Parameters
params
Partial<WatchQueryOptions<Variables<D, V>, Data<D>>>Returns
SubscriptionsubscribeToMore
publicLets you pass a GraphQL subscription and updateQuery function to subscribe to more updates for your query.
The updateQuery parameter is a function that takes the previous query data,
then a { subscriptionData: TSubscriptionResult } object,
and returns an object with updated query data based on the new results.
Parameters
options
SubscribeToMoreOptions<Data<D>, TSubscriptionVariables, TSubscriptionData>Returns
(() => void) | voidexecuteQuery
publicasyncExecutes a Query once and updates the with the resultParameters
params
Partial<QueryOptions<Variables<D, V>, Data<D>>>| Option | Type | Description |
|---|---|---|
| query | DocumentNode |
A GraphQL document that consists of a single query to be sent down to the server. |
| variables | Variables<D, V> |
A map going from variable name to variable value, where the variables are used within the GraphQL query. |
| fetchPolicy | FetchPolicy |
Specifies the fetchPolicy to be used for this query. |
| errorPolicy | ErrorPolicy |
Specifies the ErrorPolicy to be used for this query. |
| context | Record<string, unknown> |
Context object passed through the link execution chain. |
Returns
Promise<ApolloQueryResult<Data<D>>>| Property | Type | Description |
|---|---|---|
| data | Data<D> |
If the query resolved, the data. |
| error | ApolloError |
If the query rejected, the error. |
| errors | readonly GraphQLError[] |
If the query returned partials results, and some were errors, the list of errors. |
| loading | boolean |
Whether the operation is in-flight. |
| partial | boolean |
Whether the query returned partial data. |
| networkStatus | NetworkStatus |
See NetworkStatus. |
fetchMore
publicasyncExposes the ObservableQuery#fetchMore method.
https://www.apollographql.com/docs/react/api/core/ObservableQuery/#ObservableQuery.fetchMore
The optional updateQuery parameter is a function that takes the previous query data,
then a { subscriptionData: TSubscriptionResult } object,
and returns an object with updated query data based on the new results.
The optional variables parameter is an optional new variables object.
Parameters
params
Partial<FetchMoreParams<D, V>>| Option | Type | Description |
|---|---|---|
| query | DocumentNode |
Query to fetch, defaults to this.query |
| updateQuery | Function |
Function to determine how to update the cache when the query resolves. (deprecated - use field policies instead) |
| variables | Variables<D, V> |
Query variables |
| context | Record<string, unknown> |
Context object passed through the link execution chain. |
Returns
Promise<ApolloQueryResult<Data<D>>>| Property | Type | Description |
|---|---|---|
| data | Data<D> |
If the query resolved, the data. |
| error | ApolloError |
If the query rejected, the error. |
| errors | readonly GraphQLError[] |
If the query returned partials results, and some were errors, the list of errors. |
| loading | boolean |
Whether the operation is in-flight. |
| partial | boolean |
Whether the query returned partial data. |
| networkStatus | NetworkStatus |
See NetworkStatus. |
startPolling
publicParameters
ms
numberReturns
voidstopPolling
publicReturns
void$
publicquerySelector within the render root.Parameters
sel
stringReturns
E | null$$
publicquerySelectorAll within the render root.Parameters
sel
stringReturns
NodeListOf<E>
Private Methods
isQueryable
privateParameters
node
NodeReturns
node is (ShadowRoot|Document)createRenderRoot
protectedReturns
ShadowRoot|HTMLElementgetElementByIdFromRoot
privateParameters
id
string|nullReturns
HTMLElement | nullgetTemplateFromRoot
privateReturns
HTMLTemplateElement | nullExports
js ApolloQueryElement from apollo-query.js
custom-element-definition apollo-query from apollo-query.js