Skip to content

Commit f84e4bb

Browse files
authored
Infra/use did update (#1119)
* created useDIdUpdate hook * added unittests to cover useDidUpdate hook * useDidUpdate export * typescript * remove unused * remove unused * naming * Avoid re run isEqual again by using useMemo + match dependencies type * PR Comment - logic is based on another useEffect check * Fix dependencies array to be flat * Add supported test to validate useDidUpdate not getting called when same vaule passed * naming
1 parent 2397023 commit f84e4bb

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

src/hooks/useDidUpdate/__tests__/useDidUpdate.spec.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,15 @@ describe('useDidUpdate hook tests', () => {
6666
rerender();
6767
expect(action.mock.calls.length).toBe(1);
6868
});
69+
70+
it('Expect action not to be called when value in array dependencies array has not change value just reference', () => {
71+
const action = jest.fn();
72+
let dependencies = [false];
73+
const {rerender} = renderHook(() => useDidUpdate(action, dependencies));
74+
75+
dependencies = [false];
76+
rerender();
77+
expect(action.mock.calls.length).toBe(0);
78+
});
79+
6980
});

src/hooks/useDidUpdate/index.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,12 @@ const useDidUpdate = (callback: () => void, dep: [any]) => {
77
const isMounted = useRef<boolean>(false);
88

99
useEffect(() => {
10-
if (!isMounted.current) {
11-
return;
10+
if (isMounted.current) {
11+
callback();
12+
} else {
13+
isMounted.current = true;
1214
}
13-
callback();
14-
}, [dep]);
15-
16-
useEffect(() => {
17-
isMounted.current = true;
18-
}, []);
15+
}, dep);
1916
};
2017

2118
export default useDidUpdate;

0 commit comments

Comments
 (0)