Здравствуйте, использую Effector.
Нужно сделать вызов эффекта раз в n секунд.
События mount/umnount - маунт/анмаунт компонента.
Всё работает в "первом" жизненном цикле компонента, т.е. если компонент монтируется ещё раз, то вызов эффекта (fetch) происходит 1 раз.
import { createEffect, forward } from 'effector';
import { mount, unmount } from './events';
import { ApiService } from '../../services';
const apiService = new ApiService();
const fetch = createEffect('fetch stats');
fetch.use(apiService.getStats);
const timeout = createEffect('fetch timeout');
timeout.use(() => new Promise((res) => {
setTimeout(() => res(), 3000);
}));
forward({ from: mount, to: fetch });
forward({ from: fetch.done, to: timeout });
const stop = forward({ from: timeout.done, to: fetch });
unmount.watch(stop);
export { fetch };