react-route-cache
Version:
keep-alive cache for react router
39 lines (38 loc) • 1.15 kB
JavaScript
import { useLocation, useNavigate } from 'react-router-dom';
import { useKeepAliveContext } from '../context';
export const useKeepAlive = () => {
const navigator = useNavigate();
const { pathname } = useLocation();
const { active, setActive, tabs, setTabs } = useKeepAliveContext();
const close = (key) => {
const tabKey = key || pathname;
const index = tabs.findIndex((item) => item.key === tabKey);
if (index !== -1 && tabs.length > 1) {
tabs.splice(index, 1);
setTabs([...tabs]);
if (active === tabKey) {
navigator(tabs[0].key);
}
}
};
const closeNavigator = (url) => {
const index = tabs.findIndex((item) => item.key === pathname);
if (index !== -1) {
tabs.splice(index, 1);
setTabs([...tabs]);
navigator(url);
}
};
const closeAll = () => {
setTabs([tabs.find((item) => item.key === active)]);
};
return {
active,
tabs,
setTabs,
setActive,
close,
closeNavigator,
closeAll,
};
};