我真的很想知道为什么getElementById返回null,而使用getElementsByClassName可以访问相同的元素。如果有人能帮助我理解这是什么原因就太好了。
请查看下面的代码,它是一个功能性的React组件,我将handleClose函数作为props传递,它关闭了模态框,但实际上它并不需要,所以我只放了Modal组件的代码。
请查看下面的代码,它是一个功能性的React组件,我将handleClose函数作为props传递,它关闭了模态框,但实际上它并不需要,所以我只放了Modal组件的代码。
import React, { useRef, useEffect } from 'react'
const A11yModal = ({ handleClose }) => {
const focusClose = useRef(null)
var closeBtn_cls = document.getElementsByClassName("btn-close")
var closeIcon=document.getElementById('btnclose')
useEffect(() => {
focusClose.current.focus();
console.log("using Id",closeIcon);
console.log("using ClassName",closeBtn_cls);
}, [])
function onKeyPressed(e) {
if (e.keyCode === 27) {
handleClose()
}
}
return (
<div className="modal display-block">
<section className="modal-main" role="dialog"
aria-modal="true" onKeyDown={(e) => onKeyPressed(e)}>
<button className="btn-close" id="btnclose" onClick={(e) => handleClose(e)} ref={focusClose}>
X
</button>
<h1 id="modal_title" className="title" >Modal</h1>
<div id="full_description" className="description" aria-describedby="full_description">
<p>Description goes here.</p>
</div>
<button className="close_btn" id="closebtn" onClick={(e) => handleClose(e)}> Close </button>
</section>
</div>
)
}
export default A11yModal
ref={focusClose}
的引用。 - palaѕнcreatePortal
,或者使用一个库来实现。 - karianpour