简单介绍就能理解的 React Portals(传送门)
模态对话框 工具提示 悬浮卡 加载动画
const Modal = ({ message, isOpen, onClose, children }) => {
if (!isOpen) return null;
return ReactDOM.createPortal(
"modal">,
"message">{message}
domNode
);
};
为什么我们需要它呢
const Modal = ({ message, isOpen, onClose, children }) => {
if (!isOpen) return null;
return ReactDOM.createPortal(
"modal">,
{message}
document.body
);
};
function Component() {
const [open, setOpen] = useState(false);
return (
"component">
message="Hello World!"
isOpen={open}
onClose={() => setOpen(false)}
/>
);
}
什么时候使用 Portal 呢
事件冒泡会正常工作 —— 通过将事件传播到 React 树的祖先,事件冒泡将按预期工作,而与 DOM 中的 Portal 节点位置无关。 React 可以控制 Portal 节点及其生命周期 — 当通过 Portal 渲染子元素时,React 仍然可以控制它们的生命周期。 React Portal 只影响 DOM 结构 —— Portal 只会影响 HTML DOM 结构,而不会影响 React 组件树。 预定义的 HTML 挂载点 —— 使用 React Portal 时,你需要提前定义一个 HTML DOM 元素作为 Portal 组件的挂载。
结论
评论