React Portals 渲染到 body 后样式丢失怎么办?
我在用 React Portals 把一个 Modal 组件渲染到 document.body 下,结果发现原本在组件内部的样式全没了。我试过把 CSS 类名加上,也确认了类名没拼错,但就是不生效。
是不是因为 Portal 跳出了原来的 DOM 结构,导致 CSS 作用域失效了?我的 Modal 是这样写的:
const Modal = ({ children }) => {
return createPortal(
<div className="modal-overlay">{children}</div>,
document.body
);
};
而 .modal-overlay 的样式是写在同一个文件里的 CSS 模块里,难道 Portal 不能用 CSS Modules 吗?
改一下就行,你可以尝试在 Modal 组件外部引入样式文件,或者用普通的全局样式来覆盖。这里有个例子,假设你用的是 CSS Modules:
先确保你的样式文件正确导出类名:
然后在组件中导入并使用这个类名:
注意
className要用大括号包裹,确保传递的是动态生成的类名字符串。如果还是不行,检查一下浏览器控制台有没有加载样式文件的错误信息。