@vgbire/react-keep-alive
Version:
React keepAlive
23 lines (22 loc) • 929 B
JavaScript
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]);
};