TelegramPWA/src/hooks/useSignalEffect.ts
2023-02-08 00:43:48 +01:00

24 lines
631 B
TypeScript

import { useRef } from '../lib/teact/teact';
import { cleanupEffect, isSignal } from '../util/signals';
import useEffectOnce from './useEffectOnce';
export function useSignalEffect(effect: NoneToVoidFunction, dependencies: readonly any[]) {
// The is extracted from `useEffectOnce` to run before all effects
const isFirstRun = useRef(true);
if (isFirstRun.current) {
isFirstRun.current = false;
dependencies?.forEach((dependency) => {
if (isSignal(dependency)) {
dependency.subscribe(effect);
}
});
}
useEffectOnce(() => {
return () => {
cleanupEffect(effect);
};
});
}