首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React useState的性能非常差

问React useState的性能非常差
EN

Stack Overflow用户
提问于 2020-11-29 20:46:40
回答 1查看 46关注 0票数 2

我很难理解这个非常简单的代码中的问题:

代码语言:javascript
复制
    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>
        )
    }

当我调整页面大小时,页面会严重滞后,甚至会导致浏览器出现bug。代码似乎有问题,但我找不到。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-29 20:50:21

您需要将add event listener放入useEffect。

代码语言:javascript
复制
import React, { useState, useEffect } from 'react'
.....
.....
useEffect(() => {

    window.addEventListener("resize", handlePopupSize)
    return () => window.removeEventListener("resize", handlePopupSize)
},[])

您当前的代码创建了一个addEventListeners循环,因为在每次渲染时都会创建一个侦听器,而设置状态会导致每次调整大小时都会重新渲染。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65060227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档