diff --git a/src/useQuery.js b/src/useQuery.js index 2cc565fd..175b5f14 100644 --- a/src/useQuery.js +++ b/src/useQuery.js @@ -25,9 +25,7 @@ module.exports = function useQuery(query, opts = {}) { } React.useEffect(() => { - if (!state.data && !state.error) { - queryReq(); - } + queryReq(); }, [query, JSON.stringify(opts.variables)]); return { diff --git a/test/unit/useQuery.test.js b/test/unit/useQuery.test.js index 07bae2a4..a4db8b16 100644 --- a/test/unit/useQuery.test.js +++ b/test/unit/useQuery.test.js @@ -75,18 +75,6 @@ describe('useQuery', () => { expect(mockQueryReq).toHaveBeenCalledTimes(1); }); - it('does not send the same query on mount if data is already present', () => { - mockState.data = { some: 'data' }; - testHook(() => useQuery(TEST_QUERY), { wrapper: Wrapper }); - expect(mockQueryReq).not.toHaveBeenCalled(); - }); - - it('does not send the query on mount if there is an error', () => { - mockState.error = true; - testHook(() => useQuery(TEST_QUERY), { wrapper: Wrapper }); - expect(mockQueryReq).not.toHaveBeenCalled(); - }); - it('adds query to ssrPromises when in ssrMode if no data & no error', () => { mockClient.ssrMode = true; mockQueryReq.mockResolvedValueOnce('data'); @@ -135,6 +123,28 @@ describe('useQuery', () => { expect(mockQueryReq).toHaveBeenCalledTimes(2); }); + it('sends the query again if the variables change, even if there was previously data', () => { + let options = { variables: { limit: 2 } }; + const { rerender } = testHook(() => useQuery(TEST_QUERY, options), { + wrapper: Wrapper + }); + mockState.data = { some: 'data' }; + options.variables.limit = 3; + rerender(); + expect(mockQueryReq).toHaveBeenCalledTimes(2); + }); + + it('sends the query again if the variables change, even if there was previously an error', () => { + let options = { variables: { limit: 2 } }; + const { rerender } = testHook(() => useQuery(TEST_QUERY, options), { + wrapper: Wrapper + }); + mockState.error = true; + options.variables.limit = 3; + rerender(); + expect(mockQueryReq).toHaveBeenCalledTimes(2); + }); + it('sends another query if the query changes', () => { let query = TEST_QUERY; const { rerender } = testHook(() => useQuery(query), { @@ -144,4 +154,26 @@ describe('useQuery', () => { rerender(); expect(mockQueryReq).toHaveBeenCalledTimes(2); }); + + it('sends the query again if the query changes, even if there was previously data', () => { + let query = TEST_QUERY; + const { rerender } = testHook(() => useQuery(query), { + wrapper: Wrapper + }); + mockState.data = { some: 'data' }; + query = ANOTHER_TEST_QUERY; + rerender(); + expect(mockQueryReq).toHaveBeenCalledTimes(2); + }); + + it('sends the query again if the query changes, even if there was previously an error', () => { + let query = TEST_QUERY; + const { rerender } = testHook(() => useQuery(query), { + wrapper: Wrapper + }); + mockState.error = true; + query = ANOTHER_TEST_QUERY; + rerender(); + expect(mockQueryReq).toHaveBeenCalledTimes(2); + }); });