From 5e7f47b83223606a24fff0f56cfc58739d2971a7 Mon Sep 17 00:00:00 2001 From: Federico Zivolo Date: Thu, 28 Mar 2019 16:57:03 +0100 Subject: [PATCH] fix: show previous data while loading new one --- src/useQuery.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/useQuery.ts b/src/useQuery.ts index ee8a8a4..c34c2fa 100644 --- a/src/useQuery.ts +++ b/src/useQuery.ts @@ -12,7 +12,7 @@ import ApolloClient, { WatchQueryOptions, } from 'apollo-client'; import { DocumentNode } from 'graphql'; -import { useContext, useEffect, useMemo, useState } from 'react'; +import { useContext, useEffect, useMemo, useRef, useState } from 'react'; import { useApolloClient } from './ApolloContext'; import { SSRContext } from './internal/SSRContext'; import actHack from './internal/actHack'; @@ -96,6 +96,8 @@ export function useQuery< ? 'cache-first' : actualCachePolicy; + const lastResult = useRef(null); + const watchQueryOptions: WatchQueryOptions = useMemo( () => compact({ @@ -144,6 +146,12 @@ export function useQuery< }; } + if (result.loading) { + data = { + ...(lastResult.current || {}).data, + }; + } + return { data, error: @@ -161,6 +169,7 @@ export function useQuery< }, [shouldSkip, responseId, observableQuery] ); + lastResult.current = currentResult; useEffect( () => {