Skip to content

Commit 5c790f2

Browse files
committed
Make sure run/reload is updated when dependent props change. Fixes #32.
1 parent beccf07 commit 5c790f2

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

Diff for: src/useAsync.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ const useAsync = (arg1, arg2) => {
9999
setData,
100100
setError,
101101
}),
102-
[state]
102+
[state, deferFn, onResolve, onReject]
103103
)
104104
}
105105

Diff for: src/useAsync.spec.js

+31
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,37 @@ describe("useAsync", () => {
4141
await waitForElement(() => getByText("done"))
4242
expect(onResolve).toHaveBeenCalledWith("done")
4343
})
44+
45+
test("calling run() will always use the latest onResolve/onReject callbacks", async () => {
46+
const promiseFn = jest.fn(() => resolveTo())
47+
const deferFn = () => resolveTo()
48+
function App() {
49+
const [count, setCount] = React.useState(0)
50+
const { reload } = useAsync({
51+
promiseFn,
52+
count,
53+
watch: count,
54+
})
55+
const { run } = useAsync({
56+
deferFn,
57+
onResolve: reload,
58+
})
59+
return (
60+
<div>
61+
<button onClick={() => setCount(n => n + 1)}>inc</button>
62+
<button onClick={() => run()}>run</button>
63+
</div>
64+
)
65+
}
66+
const { getByText } = render(<App />)
67+
expect(promiseFn).toHaveBeenLastCalledWith(expect.objectContaining({ count: 0 }), abortCtrl)
68+
fireEvent.click(getByText("inc"))
69+
await resolveTo() // resolve promiseFn
70+
expect(promiseFn).toHaveBeenLastCalledWith(expect.objectContaining({ count: 1 }), abortCtrl)
71+
fireEvent.click(getByText("run"))
72+
await resolveTo() // resolve deferFn
73+
expect(promiseFn).toHaveBeenLastCalledWith(expect.objectContaining({ count: 1 }), abortCtrl)
74+
})
4475
})
4576

4677
describe("useFetch", () => {

0 commit comments

Comments
 (0)