1 | import { useEffect, useDebugValue, useRef } from 'react';
|
2 | import useDebouncedState from './useDebouncedState';
|
3 | const defaultIsEqual = (a, b) => a === b;
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | function useDebouncedValue(value, waitOrOptions = 500) {
|
14 | const previousValueRef = useRef(value);
|
15 | const isEqual = typeof waitOrOptions === 'object' ? waitOrOptions.isEqual || defaultIsEqual : defaultIsEqual;
|
16 | const [debouncedValue, setDebouncedValue] = useDebouncedState(value, waitOrOptions);
|
17 | useDebugValue(debouncedValue);
|
18 | useEffect(() => {
|
19 | if (!isEqual || !isEqual(previousValueRef.current, value)) {
|
20 | previousValueRef.current = value;
|
21 | setDebouncedValue(value);
|
22 | }
|
23 | });
|
24 | return debouncedValue;
|
25 | }
|
26 | export default useDebouncedValue; |
\ | No newline at end of file |