React 实现input输入框的防抖和节流
1.为什么使用防抖和节流
对于频繁触发的事件 比如keydown keyup事件 当频繁点击时候 会多次触发事件 页面出现卡顿 影响性能
2.函数防抖(debounce):间隔时间内只执行一次 函数节流(throttle):间隔时间内执行
3.使用场景
函数防抖:搜索框等
函数节流:鼠标不断点击事件等
4.目的
提升性能 提高用户体验
5.用react实现防抖和节流
import React, { Component } from "react";
class UnDebounce extends Component {
constructor(props) {
super(props);
this.state = {
timerId: null, //整数 定时器的编号 用来取消这个定时器
}
}
//模仿ajax请求
ajax = (content) => {
console.log('ajax:' + content)
}
debounce = (fn, delay = 3000) => {
//期间间隔执行 节流
return (...rest) => { //箭头函数是没有arguments的 所以用...rest 来代替
let args = rest;
if (this.state.timerId) clearTimeout(this.state.timerId);//要用this.timerId 而不能直接定义var timerId=null;
this.state.timerId = setTimeout(() => {
fn.apply(this, args)
}, delay)
}
}
throttle = (fn, delay = 3000) => {//
//期间间隔执行 节流
let canRun = true;
return (...rest) => {
if (!canRun) return;
canRun = false;
setTimeout(() => {
fn.apply(this, rest);
canRun = true;
}, delay)
}
}
onUndebounceKeyUpClick = (e) => {//只要是按下键盘就会发生ajax请求 会出现资源浪费 一般情况下当输入完整字符才会请求数据
this.ajax(e.target.value)
}
onDebounceKeyUpClick = (e) => {//加入防抖动后 在频繁输入后 不会发送请求
let debounceAjax = this.debounce(this.ajax, 3000)
debounceAjax(e.target.value)
}
onThrottleKeyUpClick = (e) => { //ajax会按照我们设定的时间,每1s执行一次
let throttleAjax = this.throttle(this.ajax, 3000);
throttleAjax(e.target.value)
}
render() {
return (
<div>
正常input:<input onKeyUp={this.onUndebounceKeyUpClick} />
防抖动的input:<input onKeyUp={this.onDebounceKeyUpClick} />
节流的input:<input onKeyUp={this.onThrottleKeyUpClick} />
</div>
);
}
}
export default UnDebounce;
6.使用lodash实现防抖和节流
import _ from 'lodash';
实现防抖 :onClick = { _.debounce(this.ajax, 200)}
实现节流 :onClick = { _.throttle(this.ajax, 200)}
React 实现input输入框的防抖和节流的更多相关文章
- 【react】input输入框可输入的最好实现方式
使用的是refs.react中输入框不能直接定义value.输入框是可变的,react会提示报错.需要使用的inChange事件(输入框内容被改变时触发). 要定义输入框初始值,需要在componen ...
- 2019 面试准备 - JS 防抖与节流 (超级 重要!!!!!)
Hello 小伙伴们,如果觉得本文还不错,记得给个 star , 你们的 star 是我学习的动力!GitHub 地址 本文涉及知识点: 防抖与节流 重绘与回流 浏览器解析 URL DNS 域名解析 ...
- 详谈js防抖和节流
本文由小芭乐发表 0. 引入 首先举一个例子: 模拟在输入框输入后做ajax查询请求,没有加入防抖和节流的效果,这里附上完整可执行代码: <!DOCTYPE html> <html ...
- 来聊聊JavaScript中的防抖和节流
目录 JavaScript防抖和节流 问题还原 防抖 什么是防抖 使用场景 节流 什么是节流 使用场景 JavaScript防抖和节流 问题还原 我们先来通过代码把常见的问题还原: <html& ...
- js防抖和节流优化浏览器滚动条滚动到最下面时加载更多数据
防抖和节流,主要是用来防止过于平凡的执行某个操作,如浏览器窗口变化执行某个操作,监听某个input输入框keyup变化,瀑布流布局时Y轴滚动,图片加载. js函数的防抖 经过一段事件才执行某个操作,如 ...
- 彻底搞懂JavaScript的闭包、防抖跟节流
最近出去面试了一下,收获颇多!!! 以前的我,追求实际,比较追求实用价值,然而最近面试,传说中的面试造火箭,工作拧螺丝,竟然被我遇到了.虽然很多知识点在实际工作中并不经常用到,但人家就是靠这个来筛选人 ...
- js高阶函数应用—函数防抖和节流
高阶函数指的是至少满足下列两个条件之一的函数: 1. 函数可以作为参数被传递:2.函数可以作为返回值输出: javaScript中的函数显然具备高级函数的特征,这使得函数运用更灵活,作为学习js必定会 ...
- react中input自动聚焦问题
input自动聚焦问题 在react中可以使用refs解决这个问题,首先看一下refs的使用场景: (1)处理焦点.文本选择或媒体控制. (2)触发强制动画. (3)集成第三方 DOM 库. 使用re ...
- JS的防抖与节流
JS的防抖与节流在进行窗口的resize.scroll,输入框内容校验等操作时,如果事件处理函数调用的频率无限制,会加重浏览器的负担,导致用户体验非常糟糕.此时我们可以采用debounce(防抖)和t ...
随机推荐
- RYU安装教程
一.使用pip的形式安装RYU 1.首先检查ubuntu中是否存在pip,命令为 sudo pip3 --version 2.如果存在则使用默认版本8.1.1就行不必跟新,否则自己下载一个pip 3. ...
- [TJOI2009] 猜数字 - 中国剩余定理
现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意的i,n ...
- 静态区间第k小 - 整体二分
蒟蒻终于学会整体二分啦! 思路 实现 丑陋无比的代码 #include <bits/stdc++.h> using namespace std; const int N = 200005; ...
- 创建spring boot 项目
1.新建Spring Starter Project(需要连接外网) 2.选择web 3.点击完成,生成maven项目 pom文件默认有一些依赖,但是有一个地方报错,<parent>节点报 ...
- cc.formatStr()用法
cc.formatStr() 第一个变量为含有 %s 或 %d 的字符串 后面依次为%s或%d对应的内容
- 学习 Rust cookbook 之算法篇(algorithm)
原文作者:suhanyujie 永久链接:https://github.com/suhanyujie/rust-cookbook-note 博客链接:https://ishenghuo.cnblogs ...
- CSS技巧!鼠标经过图片抖动效果
把代码加到style.css(模板的主css里面): /**图片抖动**/ img:hover{-webkit-animation: tada 1s .2s ease both;-moz-animat ...
- Android 验证APK签名对比
最近OTT制定产品,其中有一条需求是只能安装自己公司签名的APK,所以在网上找了相关资料,最后总结功能实现如下: 1.签名错误码frameworks/base/core/java/android/co ...
- 2、Spring-RootApplicationContext-refresh
上一篇文中提到父容器root applicationContext最后是调用XmlWebApplicationContext去实现的, 但是什么时候开始解析标签(默认标签.自定义标签).注册bean以 ...
- 神舟战神笔记本使用U盘重装系统
今天我的神舟战神笔记本电脑系统故障了,在这里记录一下使用U盘重装系统的方法: 1.插入装机U盘. 2.按开机键,然后马上按Esc键. 3.选择Boot Manager进入. 4.选择EFI USB D ...