我无法理解这段代码中的问题: export default function CustomPopup({wi,he,children}) { //some code const [popupSize,setPopupSize] = useState([`${wi}px`,`${he}px`]) const handlePopupSize = () =>{ let c = []; (window.innerWidth < (wi/0.9)) ? c[0] = `90%` : c[0] = `${wi}px`; (window.innerHeight < (he/0.8)) ? c[1] = `80%` : c[1] = `${he}px`; if (c != popupSize) { setPopupSize(c) }; } window.addEventListener("resize", handlePopupSize) return ( <div className="popup--page--wrapper"> <div className="popup--box" style={{width: popupSize[0], height: popupSize[1]}}> { children } </div> </div> ) }当我调整页面大小时,页面会严重滞后,甚至导致浏览器出现错误。代码似乎有问题,但我无法找出。提前致谢!
1 回答
杨魅力
TA贡献1811条经验 获得超6个赞
您需要在useEffect挂钩中添加事件侦听器。
import React, { useState, useEffect } from 'react'
.....
.....
useEffect(() => {
window.addEventListener("resize", handlePopupSize)
return () => window.removeEventListener("resize", handlePopupSize)
},[])
您当前的代码创建了一个循环addEventListeners,因为在每个渲染上都会创建一个侦听器,并且设置状态会在每次调整大小时导致新的渲染。
添加回答
举报
0/150
提交
取消