Javascript 无法在React中覆盖组件
我有以下模态组件:Javascript 无法在React中覆盖组件,javascript,css,reactjs,Javascript,Css,Reactjs,我有以下模态组件: export default function LoginModal(props) { const { showLogin, hideLogin } = props if (!showLogin) return null return ( <div class='overlay'> <div class='modal'> <article class=
export default function LoginModal(props) {
const { showLogin, hideLogin } = props
if (!showLogin) return null
return (
<div class='overlay'>
<div class='modal'>
<article class='mw5 center bg-white br3 pa3 pa4-ns mv3 ba b--black-10'>
<div class='tc'>
<h1 class='f4'>Firstname Lastname</h1>
<hr class='mw3 bb bw1 b--black-10' />
</div>
<p class='lh-copy measure center f6 black-70'>
test test test test
</p>
</article>
</div>
</div>
)
}
我需要的模式显示为一个登录卡在屏幕中央与背景暗淡,这是常见的许多网站。我也不希望使用UI组件库来实现。谢谢你的帮助 我认为你在你的
.overlay
样式中缺少了一个位置:fixed
此外,您可能需要考虑在您的应用程序的DOM层次结构之外使用模态,即,在<代码> <代码>或<代码> <代码>下,我们通常使用.< 为此,您的
index.html
或等效文件将具有如下内容:
<div id="app"></div>
<div id="modal"></div>
export default function LoginModal(props) {
const { showLogin, hideLogin } = props;
if (!showLogin) return null;
return ReactDOM.createPortal((
<div class='overlay'>
<div class='modal'>
<article class='mw5 center bg-white br3 pa3 pa4-ns mv3 ba b--black-10'>
<div class='tc'>
<h1 class='f4'>Firstname Lastname</h1>
<hr class='mw3 bb bw1 b--black-10' />
</div>
<p class='lh-copy measure center f6 black-70'>
test test test test
</p>
</article>
</div>
</div>
), document.getElementById('modal'));
}
请注意,如果您尝试重用本例中的代码来创建一个通用的Modal
组件,那么一次只能显示一个组件,因为它们将在同一#Modal
元素中进行渲染
在中,您可以看到一个动态创建新元素的示例,这样您就可以同时拥有多个模态。因此,您关于CSS修复的建议非常有效,但是,正如您所述,我尝试使用门户渲染我的模态,但由于某些原因,它没有出现在屏幕上。您是否知道为什么会出现这种情况?您作为root使用的元素是否确实存在于页面上?在本例中,它将是
document.getElementById('modal')
,因此需要一个具有id=“modal”
的元素才能工作。你有什么错误吗?话虽如此,代码中的主要问题是缺少位置:修复了,因此如果应用程序不太复杂,您可能不需要使用门户。
<div id="app"></div>
<div id="modal"></div>
export default function LoginModal(props) {
const { showLogin, hideLogin } = props;
if (!showLogin) return null;
return ReactDOM.createPortal((
<div class='overlay'>
<div class='modal'>
<article class='mw5 center bg-white br3 pa3 pa4-ns mv3 ba b--black-10'>
<div class='tc'>
<h1 class='f4'>Firstname Lastname</h1>
<hr class='mw3 bb bw1 b--black-10' />
</div>
<p class='lh-copy measure center f6 black-70'>
test test test test
</p>
</article>
</div>
</div>
), document.getElementById('modal'));
}