UNPKG

@vgbire/react-keep-alive

Version:
40 lines (39 loc) 1.51 kB
import React, { useContext, useState, createContext, useEffect } from 'react'; const KeepAliveScopeContext = createContext({ activateds: {}, deactivateds: {} }); KeepAliveScopeContext.displayName = 'KeepAliveScope'; export const KeepAliveScope = ({ children }) => { const [active, setActive] = useState(''); const [activateds, setActivateds] = useState({}); const [deactivateds, setDeactivateds] = useState({}); useEffect(() => { var _a; // 调用activateds if ((_a = activateds[active]) === null || _a === void 0 ? void 0 : _a.length) { activateds[active].forEach((item) => { const deactivated = item(); if (deactivated) { if (!deactivateds[active]) { deactivateds[active] = []; } deactivateds[active].push(deactivated); setDeactivateds(Object.assign({}, deactivateds)); } }); } }, [active]); return (React.createElement(KeepAliveScopeContext.Provider, { value: { active, setActive, activateds, setActivateds, deactivateds, setDeactivateds, } }, children)); }; export const useKeepAliveScopeContext = () => { const context = useContext(KeepAliveScopeContext); if (!context) { throw new Error('useKeepAliveScopeContext 必须在 KeepAliveScope 中使用'); } return context; };