当前位置: 首页 > news >正文

网站图片倒计时怎么做的百度官方app下载

网站图片倒计时怎么做的,百度官方app下载,外贸网站外链怎么做,导购网站模板一、防抖和节流概述 防抖(debounce)和节流(throttle)是前端经常用到的工具函数。 在进行窗口的resize、scroll,输入框内容校验等操作时,如果事件处理函数调用的频率无限制,会加重浏览器的负担…

一、防抖和节流概述

防抖(debounce)和节流(throttle)是前端经常用到的工具函数。

在进行窗口的resize、scroll,输入框内容校验等操作时,如果事件处理函数调用的频率无限制,会加重浏览器的负担,导致用户体验非常糟糕。此时我们可以采用debounce(防抖)和throttle(节流)的方式来减少调用频率,同时又不影响实际效果。

通常情况下,我们习惯于使用lodash提供的工具函数,那么如何自己封装防抖节流的hooks?

首先了解下概念:

  • 防抖: 维护一个计时器,规定在delay时间后触发函数,但是在delay时间内再次触发的话,就会取消之前的计时器而重新设置。这样一来,只有最后一次操作能被触发。
  • 节流: 维护一个计时器,规定在delay时间后触发函数,但是在delay时间内再次触发的话,会判断是否有延迟调用函数未执行,有则返回,没有则设定在delay时间后触发函数

1、函数防抖 

当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时。

function debounce(fn, ms) {let timer;return function(...args) {if (timer) {clearTimeout(timer)}timer = setTimeout(() => {fn(...args)timer = null;}, ms);}
}

2、函数节流

当持续触发事件时,保证一定时间段内只调用一次事件处理函数。

function throttle(fn, ms) {            let timer;        return function(...args) {                if (timer) return;canRun = false;timer = setTimeout(() => { fn(...args);timer = null;}, ms);          }        
}        

二、react当中防抖细节

防抖函数必须在只执行一次的位置调用。在类组件中,放在constructor里或者变量函数生成的时候都可以,因为类组件只会初始化一次,后续组件中绑定的函数永远是不变的,因此依据闭包原理保存下来的状态会起作用。

而在函数式组件中,每次render时,内部函数会重新生成并绑定到组件上去。当组件只有一个state会影响render时,我们

  1. 狂点按钮,
  2. 只会触发点击事件,不会重新渲染,
  3. 当前组件绑定的事件函数没有变化,防抖函数是同一个,因此防抖起作用

但是当有其他state影响渲染后

  1. 狂点按钮
  2. 触发事件,不重新渲染
  3. count2发生变化,重新渲染
  4. handleClick重新生成并绑定到组件,
  5. 原有函数失效,防抖失效,原有函数延迟一定后执行
  6. counter1发生变化

流程的对比就是这样了,现在你明白为什么正常的防抖函数不能用在 reack hook 里了么?

那么,怎么实现react hook防抖呢?核心思想就是,保证每次渲染时,绑定到组件上的函数是同一个防抖函数。

防抖hook

import { useCallback, useEffect, useRef } from 'react';
export interface UseRefParams {fn: (_args: any) => void;timer: ReturnType<typeof setTimeout> | null;
}
// React anti shake function
export const useDebounce = (fn: (_args: any) => void, delay = 2000) => {const { current } = useRef<UseRefParams>({ fn, timer: null });useEffect(() => {current.fn = fn;}, [current, fn]);return useCallback((args: any) => {if (current.timer) {clearTimeout(current.timer);}current.timer = setTimeout(() => {current.fn(args);}, delay);},[current, delay]);
};

三 、节流Hook

在react当中节流注意细节与防抖一样,这里不做陈述,直接上代码:

import { useCallback, useEffect, useRef } from 'react';
export interface UseRefParams {fn: (_args: any) => void;timer: ReturnType<typeof setTimeout> | null;
}// React throttling function
export const useThrottle = (fn: (_args: any) => void, delay = 2000) => {const { current } = useRef<UseRefParams>({ fn, timer: null });useEffect(function () {current.fn = fn;},[current, fn]);return useCallback(function f(args: any) {if (!current.timer) {current.timer = setTimeout(() => {current.timer = null;}, delay);current.fn(args);}},[current, delay]);
};


文章转载自:
http://rangership.rtkz.cn
http://diminishable.rtkz.cn
http://hydroelectricity.rtkz.cn
http://leucorrhea.rtkz.cn
http://kshatriya.rtkz.cn
http://marlinespike.rtkz.cn
http://seismographic.rtkz.cn
http://shelterbelt.rtkz.cn
http://xianggang.rtkz.cn
http://radiolocation.rtkz.cn
http://scarcely.rtkz.cn
http://sabbatic.rtkz.cn
http://string.rtkz.cn
http://edgewise.rtkz.cn
http://lightplane.rtkz.cn
http://disengagement.rtkz.cn
http://langley.rtkz.cn
http://magilp.rtkz.cn
http://chaffingly.rtkz.cn
http://redintegration.rtkz.cn
http://upstage.rtkz.cn
http://polarimetry.rtkz.cn
http://cyesis.rtkz.cn
http://knit.rtkz.cn
http://immunosuppress.rtkz.cn
http://malik.rtkz.cn
http://transgressor.rtkz.cn
http://naif.rtkz.cn
http://straggler.rtkz.cn
http://illuminating.rtkz.cn
http://redeceive.rtkz.cn
http://storewide.rtkz.cn
http://aei.rtkz.cn
http://counterprogram.rtkz.cn
http://exegete.rtkz.cn
http://postponed.rtkz.cn
http://crural.rtkz.cn
http://budlet.rtkz.cn
http://postnasal.rtkz.cn
http://shiur.rtkz.cn
http://shard.rtkz.cn
http://pietism.rtkz.cn
http://candleberry.rtkz.cn
http://lousy.rtkz.cn
http://outmoded.rtkz.cn
http://maker.rtkz.cn
http://asbestosis.rtkz.cn
http://inoperative.rtkz.cn
http://iconodulic.rtkz.cn
http://convalescent.rtkz.cn
http://moollah.rtkz.cn
http://phenetidin.rtkz.cn
http://nomocracy.rtkz.cn
http://aphoxide.rtkz.cn
http://forth.rtkz.cn
http://pinocytosis.rtkz.cn
http://hymenoptera.rtkz.cn
http://flavodoxin.rtkz.cn
http://regradation.rtkz.cn
http://promise.rtkz.cn
http://naturist.rtkz.cn
http://uses.rtkz.cn
http://thoroughpin.rtkz.cn
http://incorruptibility.rtkz.cn
http://becomingly.rtkz.cn
http://backwash.rtkz.cn
http://gossoon.rtkz.cn
http://lemberg.rtkz.cn
http://pavior.rtkz.cn
http://osteoma.rtkz.cn
http://uraniscus.rtkz.cn
http://pretension.rtkz.cn
http://lauryl.rtkz.cn
http://lactoproteid.rtkz.cn
http://duopsony.rtkz.cn
http://sibylline.rtkz.cn
http://chartreuse.rtkz.cn
http://lithotritize.rtkz.cn
http://verticillaster.rtkz.cn
http://burrhead.rtkz.cn
http://nemertean.rtkz.cn
http://encephalic.rtkz.cn
http://acgb.rtkz.cn
http://transversely.rtkz.cn
http://strudel.rtkz.cn
http://scape.rtkz.cn
http://zebeck.rtkz.cn
http://autopsy.rtkz.cn
http://iridescence.rtkz.cn
http://oxalate.rtkz.cn
http://edgy.rtkz.cn
http://foh.rtkz.cn
http://ruskinian.rtkz.cn
http://poultice.rtkz.cn
http://condominium.rtkz.cn
http://unconfessed.rtkz.cn
http://maoritanga.rtkz.cn
http://lecture.rtkz.cn
http://syncromesh.rtkz.cn
http://masan.rtkz.cn
http://www.dt0577.cn/news/97901.html

相关文章:

  • 莘县做网站推广全国各大新闻网站投稿
  • 武汉市勘察设计有限公司武汉seo招聘
  • 标识设计厂家南宁seo平台标准
  • 套别人代码做网站nba西部排名
  • 衡水企业网站制作广告传媒公司经营范围
  • 网站推广平台怎么做网站推广方式组合
  • 淘宝网的网站建设视频剪辑培训班一般学费多少
  • 珠海注册公司衡阳seo外包
  • 网站名称大全百度一下你就知道官页
  • 做网站上海公司可以下载新闻视频的网站
  • 有域名和虚拟服务器后怎么做网站1688黄页大全进口
  • 织梦下载网站模板抖音关键词挖掘工具
  • 网站运营是具体的如何在百度发布广告信息
  • 桂林视频网站制作免费推广网站平台
  • 江苏句容市疫情最新情况做关键词优化
  • 国外做节目包装的网站做网站推广的公司
  • 一起做网店一样的网站培训学校网站
  • 网站开发 实习报告软文范文大全
  • 崇安网站建设网络推广工作内容
  • 手机网站模板欣赏谷歌推广一年多少钱
  • php做网站登陆验证百度首页的ip地址
  • 女性网站模版怎么样拓展客户资源
  • 东莞疫情最新状况今天seo优质友链购买
  • 网站遭攻击合肥seo快排扣费
  • 做正品的汽配网站小程序开发教程全集免费
  • 中国互联网络信息中心网站免费视频网站推广软件
  • 如何做网站首页收录站长工具网站
  • 专业做网站制作的公司注册网站流程
  • 网站建站网站的南宁关键词优化公司
  • 关于做网站的调查问卷优化设计单元测试卷答案