Skip to content

Commit 02ab59e

Browse files
authored
Bug/response interceptor cache (#236)
* v0.4.4 * v0.4.5 * v1.0.0 * should fix, need to add tests * adding test
1 parent c6b4d7c commit 02ab59e

File tree

5 files changed

+34
-5
lines changed

5 files changed

+34
-5
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -1041,6 +1041,10 @@ Todos
10411041
retryOnError: false,
10421042
refreshWhenHidden: false,
10431043
})
1044+
1045+
1046+
// potential for causing a rerender after clearing cache if needed
1047+
request.cache.clear(true)
10441048
```
10451049
10461050
- [ ] potential option ideas for `GraphQL`

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "use-http",
3-
"version": "0.4.5",
3+
"version": "1.0.0",
44
"homepage": "http://use-http.com",
55
"main": "dist/index.js",
66
"license": "MIT",

public/watch-youtube-video.png

31.5 KB
Loading

src/__tests__/useFetch.test.tsx

+24-1
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,29 @@ describe('useFetch - BROWSER - interceptors', (): void => {
602602
await act(result.current.get)
603603
expect((fetch.mock.calls[0][1] as any).data).toEqual('url')
604604
})
605+
606+
it('should still call both interceptors when using cache', async (): Promise<void> => {
607+
let requestCalled = 0
608+
let responseCalled = 0
609+
const { result, waitForNextUpdate } = renderHook(
610+
() => useFetch('url', {
611+
interceptors: {
612+
async request(options) {
613+
requestCalled++
614+
return options
615+
},
616+
async response(response) {
617+
responseCalled++
618+
return response
619+
}
620+
}
621+
}, []),
622+
)
623+
await waitForNextUpdate()
624+
await act(result.current.get)
625+
expect(requestCalled).toBe(2)
626+
expect(responseCalled).toBe(2)
627+
})
605628
})
606629

607630
describe('useFetch - BROWSER - Overwrite Global Options set in Provider', (): void => {
@@ -813,7 +836,7 @@ describe('useFetch - BROWSER - retryOn & retryDelay', (): void => {
813836

814837
it('should retryOn specific error codes', async (): Promise<void> => {
815838
const { result, waitForNextUpdate } = renderHook(
816-
() => useFetch('url', {
839+
() => useFetch('some-url-1234124', {
817840
retries: 2,
818841
retryOn: [401]
819842
}, [])

src/useFetch.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,11 @@ function useFetch<TData = any>(...args: UseFetchArgs): UseFetch<TData> {
9494
if (response.isCached && cachePolicy === CACHE_FIRST) {
9595
try {
9696
res.current = response.cached as Res<TData>
97-
const d = await tryGetData(response.cached, defaults.data)
98-
res.current.data = d
99-
data.current = d
97+
const theData = await tryGetData(response.cached, defaults.data)
98+
res.current.data = theData
99+
res.current = interceptors.response ? await interceptors.response(res.current) : res.current
100+
invariant('data' in res.current, 'You must have `data` field on the Response returned from your `interceptors.response`')
101+
data.current = res.current.data as TData
100102
if (!suspense && mounted.current) forceUpdate()
101103
return data.current
102104
} catch (err) {

0 commit comments

Comments
 (0)