码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • React 窗口防抖


    假如有这种需求:浏览器的窗口不断缩小变大,此时页面的布局不会自动刷新,需要手动刷新页面才会自适应大小。此时我们立马就会想到使用windows的onresize方法

    1. window.onresize = ()=>{
    2. // 重新渲染画面
    3. root.render(<App/>)
    4. }

    但是新的问题就会出现这个onresize方法会被调用多次,多次渲染页面会造成资源浪费,于是我们就需要使用防抖函数

    防抖函数

    简单理解为:降低本来高频率执行函数的执行次数

    完整的代码如下:

    1. const root = ReactDom.createRoot(document.getElementById('container'));
    2. //第一次渲染
    3. root.render(
    4. <APP/>
    5. )
    6. // 窗口防抖
    7. let timeId = null
    8. window.onresize = ()=>{
    9. debounce(()=>{
    10. root.render(<App/>)
    11. },1000,timeId)
    12. }
    13. /**
    14. * 为什么做到了防抖,并且定时器不会一直执行,场景:多次触发onresize方法胡回调debounce方法:
    15. * 1. 第一次会有一个定时器执行,如果没执行到timerId = null,后续的回调函数就会一直消除+不创建定时器
    16. * 2. 直到执行到timerId = null,此时后面回调debounce方法,才会创建。为什么定时器执行,没有一直运行
    17. * 3. 就是通过回调的频率以及定时器的执行时间,具体就是某一个时间点:T1定时器执行到timerId = null进入等待,而同时回调debounce,删除T1定时器,判断为false没有创建定时器,函数结束。这个时间点大概率就是最后一次调用debounce方法
    18. * @param func 要执行的函数
    19. * @param delay 延迟时间
    20. * @param timerId 定时器ID
    21. */
    22. function debounce(func, delay,timerId) {
    23. clearInterval(timerId)
    24. if(!timerId) {
    25. timerId = setInterval(() => {
    26. func() // 实际可能树未渲染完毕/不渲染 可以使用window.location.reload();刷新页面
    27. timerId = null
    28. }, delay);
    29. }
    30. }

  • 相关阅读:
    在T3开发板上实现SylixOS最小系统(一)创建BSP工程
    Opengl实例7:glm(0.9.8.5)库 +矩阵旋转+课后作业
    忘记Linux 7.x 宝塔面板密码的解决方案
    上海亚商投顾:沪指重返3100点
    手机开机入网流程 && KPI接通率和掉线率
    2022年互联网大厂的中秋仪式感
    【cf】CodeForces Round 905(Div.3)题解
    力扣第669题 修剪二叉搜索树 c++(注释)
    java计算机毕业设计校园临时用工网站MyBatis+系统+LW文档+源码+调试部署
    深度学习(五)softmax 回归之:分类算法介绍,如何加载 Fashion-MINIST 数据集
  • 原文地址:https://blog.csdn.net/m0_64332518/article/details/133054754
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号