UNPKG

@vgbire/react-keep-alive

Version:
23 lines (22 loc) 929 B
import { useEffect, useId } from 'react'; import { useKeepAliveScopeContext } from '../context'; export const useKeepAliveEffect = (callback, deps = []) => { const { active, activateds, setActivateds } = useKeepAliveScopeContext(); const id = useId(); useEffect(() => { callback.id = id; if (!activateds[active]) { activateds[active] = []; } const index = activateds[active].findIndex((item) => item.id === id); if (index !== -1) { activateds[active].splice(index, 1); } activateds[active].push(callback); setActivateds === null || setActivateds === void 0 ? void 0 : setActivateds(Object.assign({}, activateds)); return () => { delete activateds[active]; setActivateds === null || setActivateds === void 0 ? void 0 : setActivateds(Object.assign({}, activateds)); }; }, [...deps]); };