Skip to content

Commit

Permalink
(react) - Delay suspenseful updates by an effect-cycle
Browse files Browse the repository at this point in the history
  • Loading branch information
kitten committed Jan 14, 2021
1 parent 42e8996 commit c3d4585
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions packages/react-urql/src/hooks/useQuery.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { DocumentNode } from 'graphql';
import { useEffect, useCallback, useMemo } from 'react';
import { useState, useEffect, useCallback, useMemo } from 'react';

import {
Source,
Expand Down Expand Up @@ -181,13 +181,23 @@ export function useQuery<Data = any, Variables = object>(
[update, makeQuery$]
);

const [suspend, setSuspend] = useState<[Promise<any> | null]>([null]);

useEffect(() => {
sources.delete(request.key); // Delete any cached suspense source
if (!isSuspense(client, args.context)) update(query$);
try {
sources.delete(request.key); // Delete any cached suspense source
update(query$);
} catch (promise) {
if (promise != null && promise.then) {
setSuspend([promise]);
}
}
}, [update, client, query$, request, args.context]);

if (isSuspense(client, args.context)) {
update(query$);
if (suspend[0]) {
const promise = suspend[0];
suspend[0] = null;
throw promise;
}

return [state, executeQuery];
Expand Down

0 comments on commit c3d4585

Please sign in to comment.