为了账号安全,请及时绑定邮箱和手机立即绑定

React useState 表现非常糟糕

React useState 表现非常糟糕

互换的青春 2023-09-14 20:46:04
我无法理解这段代码中的问题:    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,因为在每个渲染上都会创建一个侦听器,并且设置状态会在每次调整大小时导致新的渲染。


查看完整回答
反对 回复 2023-09-14
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信