React keep-alive

577 阅读1分钟

mp.weixin.qq.com/s/Iwn2_Se5S…

import React, { useLayoutEffect, useRef, useState } from 'react';
import ReactDOM from 'react-dom';
export const Conditional = (props) => {

const [target] = useState(() => document.createElement('div'));
const containerRef = useRef();
const activeRef = useRef(false);
activeRef.current = activeRef.current || props.active;

useLayoutEffect(() => {
if (props.active) {
containerRef.current.appendChild(target);
} else {
try {
containerRef.current.removeChild(target);
} catch (e) {
console.log(e);
}
}
}, [props.active]);
return (
<>
{activeRef.current && ReactDOM.createPortal(props.children, target)}
);
};
const Foo = () =>
Foo
;
export const Page = () => {
const [hidden] = useState(false);
return (
);
};