@tanstack/solid-query 6.0.0-alpha.1 → 6.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/dev.cjs CHANGED
@@ -107,7 +107,7 @@ function useBaseQuery(options, Observer, queryClient) {
107
107
  }
108
108
  return defaultOptions;
109
109
  });
110
- const observer = new Observer(client(), defaultedOptions());
110
+ const observer = solidJs.untrack(() => new Observer(client(), defaultedOptions()));
111
111
  const trackedDefaultedOptions = solidJs.createMemo(() => defaultedOptions());
112
112
  solidJs.createRenderEffect(
113
113
  () => trackedDefaultedOptions(),
@@ -115,7 +115,9 @@ function useBaseQuery(options, Observer, queryClient) {
115
115
  observer.setOptions(opts);
116
116
  }
117
117
  );
118
- let observerResult = observer.getOptimisticResult(defaultedOptions());
118
+ let observerResult = solidJs.untrack(
119
+ () => observer.getOptimisticResult(defaultedOptions())
120
+ );
119
121
  const [state, setState] = solidJs.createStore(
120
122
  _stripFnsForSSR(observerResult)
121
123
  );
@@ -265,17 +267,26 @@ function useInfiniteQuery(options, queryClient) {
265
267
  }
266
268
  function useMutation(options, queryClient) {
267
269
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
268
- const observer = new queryCore.MutationObserver(client(), options());
269
- solidJs.createMemo(() => {
270
- observer.setOptions(options());
271
- });
270
+ const observer = solidJs.untrack(
271
+ () => new queryCore.MutationObserver(
272
+ client(),
273
+ options()
274
+ )
275
+ );
276
+ solidJs.createRenderEffect(
277
+ () => options(),
278
+ (opts) => {
279
+ observer.setOptions(opts);
280
+ }
281
+ );
272
282
  const mutate = (variables, mutateOptions) => {
273
283
  observer.mutate(variables, mutateOptions).catch(queryCore.noop);
274
284
  };
285
+ const initialResult = solidJs.untrack(() => observer.getCurrentResult());
275
286
  const [state, setState] = solidJs.createStore({
276
- ...observer.getCurrentResult(),
287
+ ...initialResult,
277
288
  mutate,
278
- mutateAsync: observer.getCurrentResult().mutate
289
+ mutateAsync: initialResult.mutate
279
290
  });
280
291
  const unsubscribe = observer.subscribe((result) => {
281
292
  setState(() => ({
@@ -310,16 +321,20 @@ function useQueries(queriesOptions, queryClient) {
310
321
  })
311
322
  )
312
323
  );
313
- const observer = new queryCore.QueriesObserver(
314
- client(),
315
- defaultedQueries(),
316
- queriesOptions().combine ? {
317
- combine: queriesOptions().combine
318
- } : void 0
324
+ const observer = solidJs.untrack(
325
+ () => new queryCore.QueriesObserver(
326
+ client(),
327
+ defaultedQueries(),
328
+ queriesOptions().combine ? {
329
+ combine: queriesOptions().combine
330
+ } : void 0
331
+ )
319
332
  );
320
- const [, getCombinedResult] = observer.getOptimisticResult(
321
- defaultedQueries(),
322
- queriesOptions().combine
333
+ const [, getCombinedResult] = solidJs.untrack(
334
+ () => observer.getOptimisticResult(
335
+ defaultedQueries(),
336
+ queriesOptions().combine
337
+ )
323
338
  );
324
339
  const initialResult = getCombinedResult();
325
340
  const [state, setState] = solidJs.createStore(
@@ -372,10 +387,15 @@ function queryOptions(options) {
372
387
  function useIsFetching(filters, queryClient) {
373
388
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
374
389
  const queryCache = solidJs.createMemo(() => client().getQueryCache());
375
- const [fetches, setFetches] = solidJs.createSignal(client().isFetching(filters?.()));
376
- const unsubscribe = queryCache().subscribe(() => {
377
- setFetches(client().isFetching(filters?.()));
378
- });
390
+ const [fetches, setFetches] = solidJs.createSignal(
391
+ solidJs.untrack(() => client().isFetching(filters?.())),
392
+ { pureWrite: true }
393
+ );
394
+ const unsubscribe = solidJs.untrack(
395
+ () => queryCache().subscribe(() => {
396
+ setFetches(client().isFetching(filters?.()));
397
+ })
398
+ );
379
399
  solidJs.onCleanup(unsubscribe);
380
400
  return fetches;
381
401
  }
@@ -393,11 +413,14 @@ function useIsMutating(filters, queryClient) {
393
413
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
394
414
  const mutationCache = solidJs.createMemo(() => client().getMutationCache());
395
415
  const [mutations, setMutations] = solidJs.createSignal(
396
- client().isMutating(filters?.())
416
+ solidJs.untrack(() => client().isMutating(filters?.())),
417
+ { pureWrite: true }
418
+ );
419
+ const unsubscribe = solidJs.untrack(
420
+ () => mutationCache().subscribe((_result) => {
421
+ setMutations(client().isMutating(filters?.()));
422
+ })
397
423
  );
398
- const unsubscribe = mutationCache().subscribe((_result) => {
399
- setMutations(client().isMutating(filters?.()));
400
- });
401
424
  solidJs.onCleanup(unsubscribe);
402
425
  return mutations;
403
426
  }
@@ -410,17 +433,20 @@ function useMutationState(options = () => ({}), queryClient) {
410
433
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
411
434
  const mutationCache = solidJs.createMemo(() => client().getMutationCache());
412
435
  const [result, setResult] = solidJs.createSignal(
413
- getResult(mutationCache(), options())
436
+ solidJs.untrack(() => getResult(mutationCache(), options())),
437
+ { pureWrite: true }
438
+ );
439
+ const unsubscribe = solidJs.untrack(
440
+ () => mutationCache().subscribe(() => {
441
+ setResult((prev) => {
442
+ const nextResult = queryCore.replaceEqualDeep(
443
+ prev,
444
+ getResult(mutationCache(), options())
445
+ );
446
+ return prev === nextResult ? prev : nextResult;
447
+ });
448
+ })
414
449
  );
415
- const unsubscribe = mutationCache().subscribe(() => {
416
- setResult((prev) => {
417
- const nextResult = queryCore.replaceEqualDeep(
418
- prev,
419
- getResult(mutationCache(), options())
420
- );
421
- return prev === nextResult ? prev : nextResult;
422
- });
423
- });
424
450
  solidJs.onCleanup(unsubscribe);
425
451
  return result;
426
452
  }
package/build/dev.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { MutationObserver, shouldThrowError, QueriesObserver, QueryClient as QueryClient$1, replaceEqualDeep, noop, notifyManager, QueryObserver, InfiniteQueryObserver } from '@tanstack/query-core';
2
2
  export * from '@tanstack/query-core';
3
- import { createContext, useContext, onCleanup, createMemo, createStore, createRenderEffect, merge, createEffect, reconcile, createSignal, isPending, refresh, snapshot } from 'solid-js';
3
+ import { createContext, useContext, onCleanup, createMemo, untrack, createRenderEffect, createStore, merge, createEffect, reconcile, createSignal, isPending, refresh, snapshot } from 'solid-js';
4
4
  import { createComponent } from '@solidjs/web';
5
5
 
6
6
  // src/useQuery.ts
@@ -106,7 +106,7 @@ function useBaseQuery(options, Observer, queryClient) {
106
106
  }
107
107
  return defaultOptions;
108
108
  });
109
- const observer = new Observer(client(), defaultedOptions());
109
+ const observer = untrack(() => new Observer(client(), defaultedOptions()));
110
110
  const trackedDefaultedOptions = createMemo(() => defaultedOptions());
111
111
  createRenderEffect(
112
112
  () => trackedDefaultedOptions(),
@@ -114,7 +114,9 @@ function useBaseQuery(options, Observer, queryClient) {
114
114
  observer.setOptions(opts);
115
115
  }
116
116
  );
117
- let observerResult = observer.getOptimisticResult(defaultedOptions());
117
+ let observerResult = untrack(
118
+ () => observer.getOptimisticResult(defaultedOptions())
119
+ );
118
120
  const [state, setState] = createStore(
119
121
  _stripFnsForSSR(observerResult)
120
122
  );
@@ -264,17 +266,26 @@ function useInfiniteQuery(options, queryClient) {
264
266
  }
265
267
  function useMutation(options, queryClient) {
266
268
  const client = createMemo(() => useQueryClient(queryClient?.()));
267
- const observer = new MutationObserver(client(), options());
268
- createMemo(() => {
269
- observer.setOptions(options());
270
- });
269
+ const observer = untrack(
270
+ () => new MutationObserver(
271
+ client(),
272
+ options()
273
+ )
274
+ );
275
+ createRenderEffect(
276
+ () => options(),
277
+ (opts) => {
278
+ observer.setOptions(opts);
279
+ }
280
+ );
271
281
  const mutate = (variables, mutateOptions) => {
272
282
  observer.mutate(variables, mutateOptions).catch(noop);
273
283
  };
284
+ const initialResult = untrack(() => observer.getCurrentResult());
274
285
  const [state, setState] = createStore({
275
- ...observer.getCurrentResult(),
286
+ ...initialResult,
276
287
  mutate,
277
- mutateAsync: observer.getCurrentResult().mutate
288
+ mutateAsync: initialResult.mutate
278
289
  });
279
290
  const unsubscribe = observer.subscribe((result) => {
280
291
  setState(() => ({
@@ -309,16 +320,20 @@ function useQueries(queriesOptions, queryClient) {
309
320
  })
310
321
  )
311
322
  );
312
- const observer = new QueriesObserver(
313
- client(),
314
- defaultedQueries(),
315
- queriesOptions().combine ? {
316
- combine: queriesOptions().combine
317
- } : void 0
323
+ const observer = untrack(
324
+ () => new QueriesObserver(
325
+ client(),
326
+ defaultedQueries(),
327
+ queriesOptions().combine ? {
328
+ combine: queriesOptions().combine
329
+ } : void 0
330
+ )
318
331
  );
319
- const [, getCombinedResult] = observer.getOptimisticResult(
320
- defaultedQueries(),
321
- queriesOptions().combine
332
+ const [, getCombinedResult] = untrack(
333
+ () => observer.getOptimisticResult(
334
+ defaultedQueries(),
335
+ queriesOptions().combine
336
+ )
322
337
  );
323
338
  const initialResult = getCombinedResult();
324
339
  const [state, setState] = createStore(
@@ -371,10 +386,15 @@ function queryOptions(options) {
371
386
  function useIsFetching(filters, queryClient) {
372
387
  const client = createMemo(() => useQueryClient(queryClient?.()));
373
388
  const queryCache = createMemo(() => client().getQueryCache());
374
- const [fetches, setFetches] = createSignal(client().isFetching(filters?.()));
375
- const unsubscribe = queryCache().subscribe(() => {
376
- setFetches(client().isFetching(filters?.()));
377
- });
389
+ const [fetches, setFetches] = createSignal(
390
+ untrack(() => client().isFetching(filters?.())),
391
+ { pureWrite: true }
392
+ );
393
+ const unsubscribe = untrack(
394
+ () => queryCache().subscribe(() => {
395
+ setFetches(client().isFetching(filters?.()));
396
+ })
397
+ );
378
398
  onCleanup(unsubscribe);
379
399
  return fetches;
380
400
  }
@@ -392,11 +412,14 @@ function useIsMutating(filters, queryClient) {
392
412
  const client = createMemo(() => useQueryClient(queryClient?.()));
393
413
  const mutationCache = createMemo(() => client().getMutationCache());
394
414
  const [mutations, setMutations] = createSignal(
395
- client().isMutating(filters?.())
415
+ untrack(() => client().isMutating(filters?.())),
416
+ { pureWrite: true }
417
+ );
418
+ const unsubscribe = untrack(
419
+ () => mutationCache().subscribe((_result) => {
420
+ setMutations(client().isMutating(filters?.()));
421
+ })
396
422
  );
397
- const unsubscribe = mutationCache().subscribe((_result) => {
398
- setMutations(client().isMutating(filters?.()));
399
- });
400
423
  onCleanup(unsubscribe);
401
424
  return mutations;
402
425
  }
@@ -409,17 +432,20 @@ function useMutationState(options = () => ({}), queryClient) {
409
432
  const client = createMemo(() => useQueryClient(queryClient?.()));
410
433
  const mutationCache = createMemo(() => client().getMutationCache());
411
434
  const [result, setResult] = createSignal(
412
- getResult(mutationCache(), options())
435
+ untrack(() => getResult(mutationCache(), options())),
436
+ { pureWrite: true }
437
+ );
438
+ const unsubscribe = untrack(
439
+ () => mutationCache().subscribe(() => {
440
+ setResult((prev) => {
441
+ const nextResult = replaceEqualDeep(
442
+ prev,
443
+ getResult(mutationCache(), options())
444
+ );
445
+ return prev === nextResult ? prev : nextResult;
446
+ });
447
+ })
413
448
  );
414
- const unsubscribe = mutationCache().subscribe(() => {
415
- setResult((prev) => {
416
- const nextResult = replaceEqualDeep(
417
- prev,
418
- getResult(mutationCache(), options())
419
- );
420
- return prev === nextResult ? prev : nextResult;
421
- });
422
- });
423
449
  onCleanup(unsubscribe);
424
450
  return result;
425
451
  }
package/build/index.cjs CHANGED
@@ -98,7 +98,7 @@ function useBaseQuery(options, Observer, queryClient) {
98
98
  }
99
99
  return defaultOptions;
100
100
  });
101
- const observer = new Observer(client(), defaultedOptions());
101
+ const observer = solidJs.untrack(() => new Observer(client(), defaultedOptions()));
102
102
  const trackedDefaultedOptions = solidJs.createMemo(() => defaultedOptions());
103
103
  solidJs.createRenderEffect(
104
104
  () => trackedDefaultedOptions(),
@@ -106,7 +106,9 @@ function useBaseQuery(options, Observer, queryClient) {
106
106
  observer.setOptions(opts);
107
107
  }
108
108
  );
109
- let observerResult = observer.getOptimisticResult(defaultedOptions());
109
+ let observerResult = solidJs.untrack(
110
+ () => observer.getOptimisticResult(defaultedOptions())
111
+ );
110
112
  const [state, setState] = solidJs.createStore(
111
113
  _stripFnsForSSR(observerResult)
112
114
  );
@@ -256,17 +258,26 @@ function useInfiniteQuery(options, queryClient) {
256
258
  }
257
259
  function useMutation(options, queryClient) {
258
260
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
259
- const observer = new queryCore.MutationObserver(client(), options());
260
- solidJs.createMemo(() => {
261
- observer.setOptions(options());
262
- });
261
+ const observer = solidJs.untrack(
262
+ () => new queryCore.MutationObserver(
263
+ client(),
264
+ options()
265
+ )
266
+ );
267
+ solidJs.createRenderEffect(
268
+ () => options(),
269
+ (opts) => {
270
+ observer.setOptions(opts);
271
+ }
272
+ );
263
273
  const mutate = (variables, mutateOptions) => {
264
274
  observer.mutate(variables, mutateOptions).catch(queryCore.noop);
265
275
  };
276
+ const initialResult = solidJs.untrack(() => observer.getCurrentResult());
266
277
  const [state, setState] = solidJs.createStore({
267
- ...observer.getCurrentResult(),
278
+ ...initialResult,
268
279
  mutate,
269
- mutateAsync: observer.getCurrentResult().mutate
280
+ mutateAsync: initialResult.mutate
270
281
  });
271
282
  const unsubscribe = observer.subscribe((result) => {
272
283
  setState(() => ({
@@ -301,16 +312,20 @@ function useQueries(queriesOptions, queryClient) {
301
312
  })
302
313
  )
303
314
  );
304
- const observer = new queryCore.QueriesObserver(
305
- client(),
306
- defaultedQueries(),
307
- queriesOptions().combine ? {
308
- combine: queriesOptions().combine
309
- } : void 0
315
+ const observer = solidJs.untrack(
316
+ () => new queryCore.QueriesObserver(
317
+ client(),
318
+ defaultedQueries(),
319
+ queriesOptions().combine ? {
320
+ combine: queriesOptions().combine
321
+ } : void 0
322
+ )
310
323
  );
311
- const [, getCombinedResult] = observer.getOptimisticResult(
312
- defaultedQueries(),
313
- queriesOptions().combine
324
+ const [, getCombinedResult] = solidJs.untrack(
325
+ () => observer.getOptimisticResult(
326
+ defaultedQueries(),
327
+ queriesOptions().combine
328
+ )
314
329
  );
315
330
  const initialResult = getCombinedResult();
316
331
  const [state, setState] = solidJs.createStore(
@@ -363,10 +378,15 @@ function queryOptions(options) {
363
378
  function useIsFetching(filters, queryClient) {
364
379
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
365
380
  const queryCache = solidJs.createMemo(() => client().getQueryCache());
366
- const [fetches, setFetches] = solidJs.createSignal(client().isFetching(filters?.()));
367
- const unsubscribe = queryCache().subscribe(() => {
368
- setFetches(client().isFetching(filters?.()));
369
- });
381
+ const [fetches, setFetches] = solidJs.createSignal(
382
+ solidJs.untrack(() => client().isFetching(filters?.())),
383
+ { pureWrite: true }
384
+ );
385
+ const unsubscribe = solidJs.untrack(
386
+ () => queryCache().subscribe(() => {
387
+ setFetches(client().isFetching(filters?.()));
388
+ })
389
+ );
370
390
  solidJs.onCleanup(unsubscribe);
371
391
  return fetches;
372
392
  }
@@ -384,11 +404,14 @@ function useIsMutating(filters, queryClient) {
384
404
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
385
405
  const mutationCache = solidJs.createMemo(() => client().getMutationCache());
386
406
  const [mutations, setMutations] = solidJs.createSignal(
387
- client().isMutating(filters?.())
407
+ solidJs.untrack(() => client().isMutating(filters?.())),
408
+ { pureWrite: true }
409
+ );
410
+ const unsubscribe = solidJs.untrack(
411
+ () => mutationCache().subscribe((_result) => {
412
+ setMutations(client().isMutating(filters?.()));
413
+ })
388
414
  );
389
- const unsubscribe = mutationCache().subscribe((_result) => {
390
- setMutations(client().isMutating(filters?.()));
391
- });
392
415
  solidJs.onCleanup(unsubscribe);
393
416
  return mutations;
394
417
  }
@@ -401,17 +424,20 @@ function useMutationState(options = () => ({}), queryClient) {
401
424
  const client = solidJs.createMemo(() => exports.useQueryClient(queryClient?.()));
402
425
  const mutationCache = solidJs.createMemo(() => client().getMutationCache());
403
426
  const [result, setResult] = solidJs.createSignal(
404
- getResult(mutationCache(), options())
427
+ solidJs.untrack(() => getResult(mutationCache(), options())),
428
+ { pureWrite: true }
429
+ );
430
+ const unsubscribe = solidJs.untrack(
431
+ () => mutationCache().subscribe(() => {
432
+ setResult((prev) => {
433
+ const nextResult = queryCore.replaceEqualDeep(
434
+ prev,
435
+ getResult(mutationCache(), options())
436
+ );
437
+ return prev === nextResult ? prev : nextResult;
438
+ });
439
+ })
405
440
  );
406
- const unsubscribe = mutationCache().subscribe(() => {
407
- setResult((prev) => {
408
- const nextResult = queryCore.replaceEqualDeep(
409
- prev,
410
- getResult(mutationCache(), options())
411
- );
412
- return prev === nextResult ? prev : nextResult;
413
- });
414
- });
415
441
  solidJs.onCleanup(unsubscribe);
416
442
  return result;
417
443
  }
package/build/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { MutationObserver, shouldThrowError, QueriesObserver, QueryClient as QueryClient$1, replaceEqualDeep, noop, notifyManager, QueryObserver, InfiniteQueryObserver } from '@tanstack/query-core';
2
2
  export * from '@tanstack/query-core';
3
- import { createContext, useContext, onCleanup, createMemo, createStore, createRenderEffect, merge, createEffect, reconcile, createSignal, isPending, refresh, snapshot } from 'solid-js';
3
+ import { createContext, useContext, onCleanup, createMemo, untrack, createRenderEffect, createStore, merge, createEffect, reconcile, createSignal, isPending, refresh, snapshot } from 'solid-js';
4
4
  import { createComponent } from '@solidjs/web';
5
5
 
6
6
  // src/useQuery.ts
@@ -97,7 +97,7 @@ function useBaseQuery(options, Observer, queryClient) {
97
97
  }
98
98
  return defaultOptions;
99
99
  });
100
- const observer = new Observer(client(), defaultedOptions());
100
+ const observer = untrack(() => new Observer(client(), defaultedOptions()));
101
101
  const trackedDefaultedOptions = createMemo(() => defaultedOptions());
102
102
  createRenderEffect(
103
103
  () => trackedDefaultedOptions(),
@@ -105,7 +105,9 @@ function useBaseQuery(options, Observer, queryClient) {
105
105
  observer.setOptions(opts);
106
106
  }
107
107
  );
108
- let observerResult = observer.getOptimisticResult(defaultedOptions());
108
+ let observerResult = untrack(
109
+ () => observer.getOptimisticResult(defaultedOptions())
110
+ );
109
111
  const [state, setState] = createStore(
110
112
  _stripFnsForSSR(observerResult)
111
113
  );
@@ -255,17 +257,26 @@ function useInfiniteQuery(options, queryClient) {
255
257
  }
256
258
  function useMutation(options, queryClient) {
257
259
  const client = createMemo(() => useQueryClient(queryClient?.()));
258
- const observer = new MutationObserver(client(), options());
259
- createMemo(() => {
260
- observer.setOptions(options());
261
- });
260
+ const observer = untrack(
261
+ () => new MutationObserver(
262
+ client(),
263
+ options()
264
+ )
265
+ );
266
+ createRenderEffect(
267
+ () => options(),
268
+ (opts) => {
269
+ observer.setOptions(opts);
270
+ }
271
+ );
262
272
  const mutate = (variables, mutateOptions) => {
263
273
  observer.mutate(variables, mutateOptions).catch(noop);
264
274
  };
275
+ const initialResult = untrack(() => observer.getCurrentResult());
265
276
  const [state, setState] = createStore({
266
- ...observer.getCurrentResult(),
277
+ ...initialResult,
267
278
  mutate,
268
- mutateAsync: observer.getCurrentResult().mutate
279
+ mutateAsync: initialResult.mutate
269
280
  });
270
281
  const unsubscribe = observer.subscribe((result) => {
271
282
  setState(() => ({
@@ -300,16 +311,20 @@ function useQueries(queriesOptions, queryClient) {
300
311
  })
301
312
  )
302
313
  );
303
- const observer = new QueriesObserver(
304
- client(),
305
- defaultedQueries(),
306
- queriesOptions().combine ? {
307
- combine: queriesOptions().combine
308
- } : void 0
314
+ const observer = untrack(
315
+ () => new QueriesObserver(
316
+ client(),
317
+ defaultedQueries(),
318
+ queriesOptions().combine ? {
319
+ combine: queriesOptions().combine
320
+ } : void 0
321
+ )
309
322
  );
310
- const [, getCombinedResult] = observer.getOptimisticResult(
311
- defaultedQueries(),
312
- queriesOptions().combine
323
+ const [, getCombinedResult] = untrack(
324
+ () => observer.getOptimisticResult(
325
+ defaultedQueries(),
326
+ queriesOptions().combine
327
+ )
313
328
  );
314
329
  const initialResult = getCombinedResult();
315
330
  const [state, setState] = createStore(
@@ -362,10 +377,15 @@ function queryOptions(options) {
362
377
  function useIsFetching(filters, queryClient) {
363
378
  const client = createMemo(() => useQueryClient(queryClient?.()));
364
379
  const queryCache = createMemo(() => client().getQueryCache());
365
- const [fetches, setFetches] = createSignal(client().isFetching(filters?.()));
366
- const unsubscribe = queryCache().subscribe(() => {
367
- setFetches(client().isFetching(filters?.()));
368
- });
380
+ const [fetches, setFetches] = createSignal(
381
+ untrack(() => client().isFetching(filters?.())),
382
+ { pureWrite: true }
383
+ );
384
+ const unsubscribe = untrack(
385
+ () => queryCache().subscribe(() => {
386
+ setFetches(client().isFetching(filters?.()));
387
+ })
388
+ );
369
389
  onCleanup(unsubscribe);
370
390
  return fetches;
371
391
  }
@@ -383,11 +403,14 @@ function useIsMutating(filters, queryClient) {
383
403
  const client = createMemo(() => useQueryClient(queryClient?.()));
384
404
  const mutationCache = createMemo(() => client().getMutationCache());
385
405
  const [mutations, setMutations] = createSignal(
386
- client().isMutating(filters?.())
406
+ untrack(() => client().isMutating(filters?.())),
407
+ { pureWrite: true }
408
+ );
409
+ const unsubscribe = untrack(
410
+ () => mutationCache().subscribe((_result) => {
411
+ setMutations(client().isMutating(filters?.()));
412
+ })
387
413
  );
388
- const unsubscribe = mutationCache().subscribe((_result) => {
389
- setMutations(client().isMutating(filters?.()));
390
- });
391
414
  onCleanup(unsubscribe);
392
415
  return mutations;
393
416
  }
@@ -400,17 +423,20 @@ function useMutationState(options = () => ({}), queryClient) {
400
423
  const client = createMemo(() => useQueryClient(queryClient?.()));
401
424
  const mutationCache = createMemo(() => client().getMutationCache());
402
425
  const [result, setResult] = createSignal(
403
- getResult(mutationCache(), options())
426
+ untrack(() => getResult(mutationCache(), options())),
427
+ { pureWrite: true }
428
+ );
429
+ const unsubscribe = untrack(
430
+ () => mutationCache().subscribe(() => {
431
+ setResult((prev) => {
432
+ const nextResult = replaceEqualDeep(
433
+ prev,
434
+ getResult(mutationCache(), options())
435
+ );
436
+ return prev === nextResult ? prev : nextResult;
437
+ });
438
+ })
404
439
  );
405
- const unsubscribe = mutationCache().subscribe(() => {
406
- setResult((prev) => {
407
- const nextResult = replaceEqualDeep(
408
- prev,
409
- getResult(mutationCache(), options())
410
- );
411
- return prev === nextResult ? prev : nextResult;
412
- });
413
- });
414
440
  onCleanup(unsubscribe);
415
441
  return result;
416
442
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-query",
3
- "version": "6.0.0-alpha.1",
3
+ "version": "6.0.0-beta.3",
4
4
  "description": "Primitives for managing, caching and syncing asynchronous and remote data in Solid",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
@@ -55,9 +55,9 @@
55
55
  "@solidjs/web": "2.0.0-beta.4",
56
56
  "babel-preset-solid": "2.0.0-beta.4",
57
57
  "npm-run-all2": "^5.0.0",
58
- "solid-js": "2.0.0-beta.4",
58
+ "solid-js": "2.0.0-beta.5",
59
59
  "tsup-preset-solid": "^2.2.0",
60
- "vite-plugin-solid": "3.0.0-next.2",
60
+ "vite-plugin-solid": "3.0.0-next.4",
61
61
  "@tanstack/query-test-utils": "0.0.0"
62
62
  },
63
63
  "peerDependencies": {
@@ -11,6 +11,7 @@ import {
11
11
  reconcile,
12
12
  refresh,
13
13
  snapshot,
14
+ untrack,
14
15
  } from 'solid-js'
15
16
  import { useQueryClient } from './QueryClientProvider'
16
17
  import { useIsRestoring } from './isRestoring'
@@ -174,7 +175,7 @@ export function useBaseQuery<
174
175
  return defaultOptions
175
176
  })
176
177
 
177
- const observer = new Observer(client(), defaultedOptions())
178
+ const observer = untrack(() => new Observer(client(), defaultedOptions()))
178
179
 
179
180
  // Track options reactively so the queryResource memo re-runs on change.
180
181
  const trackedDefaultedOptions = createMemo(() => defaultedOptions())
@@ -189,7 +190,10 @@ export function useBaseQuery<
189
190
  },
190
191
  )
191
192
 
192
- let observerResult = observer.getOptimisticResult(defaultedOptions())
193
+ let observerResult = untrack(() =>
194
+ observer.getOptimisticResult(defaultedOptions()),
195
+ )
196
+
193
197
  const [state, setState] = createStore<QueryObserverResult<TData, TError>>(
194
198
  _stripFnsForSSR(observerResult),
195
199
  )
@@ -1,4 +1,4 @@
1
- import { createMemo, createSignal, onCleanup } from 'solid-js'
1
+ import { createMemo, createSignal, onCleanup, untrack } from 'solid-js'
2
2
  import { useQueryClient } from './QueryClientProvider'
3
3
  import type { QueryFilters } from '@tanstack/query-core'
4
4
  import type { QueryClient } from './QueryClient'
@@ -11,11 +11,16 @@ export function useIsFetching(
11
11
  const client = createMemo(() => useQueryClient(queryClient?.()))
12
12
  const queryCache = createMemo(() => client().getQueryCache())
13
13
 
14
- const [fetches, setFetches] = createSignal(client().isFetching(filters?.()))
14
+ const [fetches, setFetches] = createSignal(
15
+ untrack(() => client().isFetching(filters?.())),
16
+ { pureWrite: true },
17
+ )
15
18
 
16
- const unsubscribe = queryCache().subscribe(() => {
17
- setFetches(client().isFetching(filters?.()))
18
- })
19
+ const unsubscribe = untrack(() =>
20
+ queryCache().subscribe(() => {
21
+ setFetches(client().isFetching(filters?.()))
22
+ }),
23
+ )
19
24
 
20
25
  onCleanup(unsubscribe)
21
26
 
@@ -1,4 +1,4 @@
1
- import { createMemo, createSignal, onCleanup } from 'solid-js'
1
+ import { createMemo, createSignal, onCleanup, untrack } from 'solid-js'
2
2
  import { useQueryClient } from './QueryClientProvider'
3
3
  import type { MutationFilters } from '@tanstack/query-core'
4
4
  import type { QueryClient } from './QueryClient'
@@ -12,12 +12,15 @@ export function useIsMutating(
12
12
  const mutationCache = createMemo(() => client().getMutationCache())
13
13
 
14
14
  const [mutations, setMutations] = createSignal(
15
- client().isMutating(filters?.()),
15
+ untrack(() => client().isMutating(filters?.())),
16
+ { pureWrite: true },
16
17
  )
17
18
 
18
- const unsubscribe = mutationCache().subscribe((_result) => {
19
- setMutations(client().isMutating(filters?.()))
20
- })
19
+ const unsubscribe = untrack(() =>
20
+ mutationCache().subscribe((_result) => {
21
+ setMutations(client().isMutating(filters?.()))
22
+ }),
23
+ )
21
24
 
22
25
  onCleanup(unsubscribe)
23
26
 
@@ -4,6 +4,7 @@ import {
4
4
  createRenderEffect,
5
5
  createStore,
6
6
  onCleanup,
7
+ untrack,
7
8
  } from 'solid-js'
8
9
  import { useQueryClient } from './QueryClientProvider'
9
10
  import type { DefaultError } from '@tanstack/query-core'
@@ -27,17 +28,21 @@ export function useMutation<
27
28
  ): UseMutationResult<TData, TError, TVariables, TOnMutateResult> {
28
29
  const client = createMemo(() => useQueryClient(queryClient?.()))
29
30
 
30
- const observer = new MutationObserver<
31
- TData,
32
- TError,
33
- TVariables,
34
- TOnMutateResult
35
- >(client(), options())
31
+ const observer = untrack(
32
+ () =>
33
+ new MutationObserver<TData, TError, TVariables, TOnMutateResult>(
34
+ client(),
35
+ options(),
36
+ ),
37
+ )
36
38
 
37
39
  // Track options changes and update observer
38
- createMemo(() => {
39
- observer.setOptions(options())
40
- })
40
+ createRenderEffect(
41
+ () => options(),
42
+ (opts) => {
43
+ observer.setOptions(opts)
44
+ },
45
+ )
41
46
 
42
47
  const mutate: UseMutateFunction<
43
48
  TData,
@@ -48,12 +53,13 @@ export function useMutation<
48
53
  observer.mutate(variables, mutateOptions).catch(noop)
49
54
  }
50
55
 
56
+ const initialResult = untrack(() => observer.getCurrentResult())
51
57
  const [state, setState] = createStore<
52
58
  UseMutationResult<TData, TError, TVariables, TOnMutateResult>
53
59
  >({
54
- ...observer.getCurrentResult(),
60
+ ...initialResult,
55
61
  mutate,
56
- mutateAsync: observer.getCurrentResult().mutate,
62
+ mutateAsync: initialResult.mutate,
57
63
  })
58
64
 
59
65
  const unsubscribe = observer.subscribe((result) => {
@@ -1,4 +1,4 @@
1
- import { createMemo, createSignal, onCleanup } from 'solid-js'
1
+ import { createMemo, createSignal, onCleanup, untrack } from 'solid-js'
2
2
  import { replaceEqualDeep } from '@tanstack/query-core'
3
3
  import { useQueryClient } from './QueryClientProvider'
4
4
  import type {
@@ -35,18 +35,21 @@ export function useMutationState<TResult = MutationState>(
35
35
  const mutationCache = createMemo(() => client().getMutationCache())
36
36
 
37
37
  const [result, setResult] = createSignal(
38
- getResult(mutationCache(), options()),
38
+ untrack(() => getResult(mutationCache(), options())),
39
+ { pureWrite: true },
39
40
  )
40
41
 
41
- const unsubscribe = mutationCache().subscribe(() => {
42
- setResult((prev) => {
43
- const nextResult = replaceEqualDeep(
44
- prev,
45
- getResult(mutationCache(), options()),
46
- )
47
- return prev === nextResult ? prev : nextResult
48
- })
49
- })
42
+ const unsubscribe = untrack(() =>
43
+ mutationCache().subscribe(() => {
44
+ setResult((prev) => {
45
+ const nextResult = replaceEqualDeep(
46
+ prev,
47
+ getResult(mutationCache(), options()),
48
+ )
49
+ return prev === nextResult ? prev : nextResult
50
+ })
51
+ }),
52
+ )
50
53
 
51
54
  onCleanup(unsubscribe)
52
55
 
package/src/useQueries.ts CHANGED
@@ -6,6 +6,7 @@ import {
6
6
  merge,
7
7
  onCleanup,
8
8
  reconcile,
9
+ untrack,
9
10
  } from 'solid-js'
10
11
  import { useQueryClient } from './QueryClientProvider'
11
12
  import { useIsRestoring } from './isRestoring'
@@ -205,20 +206,25 @@ export function useQueries<
205
206
  ),
206
207
  )
207
208
 
208
- const observer = new QueriesObserver<TCombinedResult>(
209
- client(),
210
- defaultedQueries(),
211
- queriesOptions().combine
212
- ? ({
213
- combine: queriesOptions().combine,
214
- } as QueriesObserverOptions<TCombinedResult>)
215
- : undefined,
209
+ const observer = untrack(
210
+ () =>
211
+ new QueriesObserver<TCombinedResult>(
212
+ client(),
213
+ defaultedQueries(),
214
+ queriesOptions().combine
215
+ ? ({
216
+ combine: queriesOptions().combine,
217
+ } as QueriesObserverOptions<TCombinedResult>)
218
+ : undefined,
219
+ ),
216
220
  )
217
221
 
218
222
  // Get initial optimistic result
219
- const [, getCombinedResult] = observer.getOptimisticResult(
220
- defaultedQueries(),
221
- (queriesOptions() as QueriesObserverOptions<TCombinedResult>).combine,
223
+ const [, getCombinedResult] = untrack(() =>
224
+ observer.getOptimisticResult(
225
+ defaultedQueries(),
226
+ (queriesOptions() as QueriesObserverOptions<TCombinedResult>).combine,
227
+ ),
222
228
  )
223
229
 
224
230
  const initialResult = getCombinedResult()