React.createPortal
是 React 提供的一个 API,用于将子节点渲染到存在于父组件以外的 DOM 节点中。这个方法创建了一个新的 DOM 节点,并将指定的子组件挂载到这个新节点上,而不是在当前组件的 DOM 结构中。
在使用 React.createPortal
时,需要指定一个目标 DOM 元素,这个元素是实际要挂载子组件的地方。通常,这个目标 DOM 元素是在 HTML 文件中的某个位置,通过 JavaScript 获取到的。
import React from 'react';
import ReactDOM from 'react-dom';
function Modal({ children }) {
const modalRoot = document.getElementById('modal-root');
return ReactDOM.createPortal(
<div className="modal-overlay">
<div className="modal-content">
{children}
</div>
</div>,
modalRoot
);
}
// 在 HTML 文件中需要有一个 id 为 modal-root 的元素
// <div id="modal-root"></div>
function App() {
return (
<div>
<h1>Welcome to My App</h1>
<Modal>
<p>This is a modal dialog.</p>
</Modal>
</div>
);
}
export default App;
问题:如果在使用 React.createPortal
时,目标 DOM 元素不存在,会报错。
原因:ReactDOM.createPortal
需要一个有效的 DOM 元素作为挂载点,如果该元素不存在,就会导致错误。
解决方法:
React.createPortal
之前,目标 DOM 元素已经被正确地添加到页面中。const modalRoot = document.getElementById('modal-root');
if (!modalRoot) {
console.error('Target DOM element for portal not found!');
return null;
}
return ReactDOM.createPortal(children, modalRoot);
通过这种方式,可以有效地避免因目标 DOM 元素不存在而导致的错误。
领取专属 10元无门槛券
手把手带您无忧上云