-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathusePolling.ts
37 lines (31 loc) · 1.12 KB
/
usePolling.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import * as React from 'react';
/**
* Вызывает переданную функцию с указанной частотой.
* @param callback Функция, которую нужно вызывать
* @param condition Условие, при котором нужно вызывать функцию. По умолчанию она вызывается всегда
* @param pollingInterval Промежуток времени между вызовами в миллисекундах. По умолчанию минута
*/
export default (
callback: VoidFunction,
condition = true,
pollingInterval = 60000
): void => {
const timer = React.useRef<NodeJS.Timeout | null>(null);
const stopPolling = React.useCallback(() => {
if (timer.current) {
clearInterval(timer.current);
timer.current = null;
}
}, []);
const startPolling = React.useCallback(() => {
stopPolling();
callback();
timer.current = setInterval(callback, pollingInterval);
}, []);
React.useEffect(() => {
if (condition) {
startPolling();
}
return () => stopPolling();
}, [condition]);
};