MCPcopy Create free account
hub / github.com/TanStack/query / useBaseQuery

Function useBaseQuery

packages/solid-query/src/useBaseQuery.ts:103–389  ·  view source on GitHub ↗
(
  options: Accessor<
    UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>
  >,
  Observer: typeof QueryObserver,
  queryClient?: Accessor<QueryClient>,
)

Source from the content-addressed store, hash-verified

101
102// Base Query Function that is used to create the query.
103export function useBaseQuery<
104 TQueryFnData,
105 TError,
106 TData,
107 TQueryData,
108 TQueryKey extends QueryKey,
109>(
110 options: Accessor<
111 UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>
112 >,
113 Observer: typeof QueryObserver,
114 queryClient?: Accessor<QueryClient>,
115) {
116 type ResourceData = QueryObserverResult<TData, TError>
117
118 const client = createMemo(() => useQueryClient(queryClient?.()))
119 const isRestoring = useIsRestoring()
120 // There are times when we run a query on the server but the resource is never read
121 // This could lead to times when the queryObserver is unsubscribed before the resource has loaded
122 // Causing a time out error. To prevent this we will queue the unsubscribe if the cleanup is called
123 // before the resource has loaded
124 let unsubscribeQueued = false
125
126 const defaultedOptions = createMemo(() => {
127 const defaultOptions = client().defaultQueryOptions(options())
128 defaultOptions._optimisticResults = isRestoring()
129 ? 'isRestoring'
130 : 'optimistic'
131 defaultOptions.structuralSharing = false
132 if (isServer) {
133 defaultOptions.retry = false
134 defaultOptions.throwOnError = true
135 // Enable prefetch during render for SSR - required for createResource to work
136 // Without this, queries wait for effects which never run on the server
137 defaultOptions.experimental_prefetchInRender = true
138 }
139 return defaultOptions
140 })
141 const initialOptions = defaultedOptions()
142
143 const [observer, setObserver] = createSignal(
144 new Observer(client(), defaultedOptions()),
145 )
146
147 let observerResult = observer().getOptimisticResult(defaultedOptions())
148 const [state, setState] =
149 createStore<QueryObserverResult<TData, TError>>(observerResult)
150
151 const createServerSubscriber = (
152 resolve: (
153 data: ResourceData | PromiseLike<ResourceData | undefined> | undefined,
154 ) => void,
155 reject: (reason?: any) => void,
156 ) => {
157 return observer().subscribe((result) => {
158 notifyManager.batchCalls(() => {
159 const query = observer().getCurrentQuery()
160 const unwrappedResult = hydratableObserverResult(query, result)

Callers 2

useQueryFunction · 0.90
useInfiniteQueryFunction · 0.90

Calls 15

useQueryClientFunction · 0.90
useIsRestoringFunction · 0.90
shouldThrowErrorFunction · 0.90
clientFunction · 0.85
createServerSubscriberFunction · 0.85
createClientSubscriberFunction · 0.85
rejectFunction · 0.85
resolveFunction · 0.85
hydratableObserverResultFunction · 0.85
refetchFunction · 0.85
defaultQueryOptionsMethod · 0.80

Tested by

no test coverage detected