function WindowSizeList() {
const [windowWidth, setWindowWidth] = useState(window.innerWidth)
const updateWindowWidth = () => {
setWindowWidth(window.innerWidth)
}
useEffect(() => {
window.addEventListener('resize', updateWindowWidth)
}, [])
return (
<>
<div>Window Width: {windowWidth}</div>
</>
)
}
此组件在首次挂载时呈现窗口宽度,useEffect()将运行,确定...然后在调整浏览器窗口大小时,window.addEventListener('resize', updateWindowWidth)
将在useEffect()内运行
useEffect(() => {
window.addEventListener('resize', updateWindowWidth)
}, [])
然后它触发了
const updateWindowWidth = () => {
setWindowWidth(window.innerWidth)
}
组件使用windowWidth
的状态更改重新呈现该值,并在组件中呈现该值,OK...但当我再次调整浏览器窗口大小时,为什么会重复该过程,即useEffect重新运行,然后更新DOM中的值,即使我在中使用了空的第二个参数[]
,但它应该运行一次
useEffect(() => {
window.addEventListener('resize', updateWindowWidth)
}, [])
2条答案
按热度按时间xuo3flqw1#
zfycwa2u2#
eventlistener只附加一次,并一直运行,直到您删除它们或重新加载页面。
//将事件行程常式附加到文件。getElementById(“myDIV”).addEventListener('resize',updateWindowWidth);
//从文件移除事件行程常式。getElementById(“myDIV”).removeEventListener('resize',updateWindowWidth)
为了更好地理解,您可以阅读JavaScript中的事件循环。