react组件封装input框的防抖处理的项目实现

 更新时间:2023年04月27日 10:58:35   作者:Leslie21.  
本文主要介绍了react组件封装input框的防抖处理的项目实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

防抖

防抖就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间

项目中有些input框需要做防抖处理,防止每次输入都要发起请求或者做判断,也就是减少触发频率,以便提高性能,避免资源浪费

1.类组件版本

//防抖的方法
const debounceOther = (func, wait = 800) => {
  let timeout; // 定时器变量
  return function () {
    clearTimeout(timeout); // 每次触发时先清除上一次的定时器,然后重新计时
    timeout = setTimeout(() => {
      func(arguments);
    }, wait); // 指定 xx ms 后触发真正想进行的操作 handler
  };
};

在项目中经常会将许多方法或复用性较高的事件封装,然后在页面引入

例:

防抖只需要看下面例子中getInputValue和inputChange即可

这是基于antd封装的一个弹窗组件,在input框 需要判断输入后是否与原有值重复,不做防抖处理则输入一次判断一次 

这里是将有封装好的debounceOther函数的js文件直接引入到这个组件中使用了

import { debounceOther } from ".........";
class RelationModal extends Component {
  state = { visible: false, inputErr: '', inputValue: '' };
  getInputValue = debounceOther(() => {
    let { specSelect } = this.props;    //原有数据
    //是否存在相同的
    let index = specSelect.findIndex(item => item.group === this.state.inputValue);
    this.setState({
      inputErr: index === -1 ? "" : '节点名称不允许重复'
    })
  },500)
  //拿到inputValue input输入框有变化500毫秒后 调用防抖方法 
  inputChange = e => {
    this.setState({
      inputValue:e.target.value
    },()=>{
      this.getInputValue()
    }) 
  };
}

2.函数组件版本

useCallback的作用其实是用来避免子组件不必要的reRender

import {useRef,useCallback,useEffect} from 'react'
function useDebounce(fn,delay,setval){
  const {current}=useRef({fn,timer:null})
  useEffect(()=>{
    current.fn=fn
  },[fn])
  return useCallback((e)=>{
    setval(e.target.value)
    if(current.timer){
        clearTimeout(current.timer)
    }
    current.timer=setTimeout(()=>{
        current.fn(e)
    },delay)
  })
}
export default useDebounce

调用

import debounce from '../utils/debounce'
import {useState} from 'react'
function My(){
    let [val,setval]=useState('')
    const inputval=debounce(()=>{
        console.log(val);
    },1000,setval)
    return <div>
       <input type="text" value={val} onChange={(e)=>inputval(e)}/>
    </div>
}
export default My

到此这篇关于react组件封装input框的防抖处理的项目实现的文章就介绍到这了,更多相关react input框防抖内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 作为老司机使用 React 总结的 11 个经验教训

    作为老司机使用 React 总结的 11 个经验教训

    这篇文章主要介绍了作为老司机使用 React 总结的 11 个经验教训,需要的朋友可以参考下
    2017-04-04
  • 解决react-connect中使用forwardRef遇到的问题

    解决react-connect中使用forwardRef遇到的问题

    这篇文章主要介绍了解决react-connect中使用forwardRef遇到的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 在 React 项目中使用 Auth0 并集成到后端服务的配置步骤详解

    在 React 项目中使用 Auth0 并集成到后端服务的配置步骤详解

    这篇文章主要介绍了在 React 项目中使用 Auth0 并集成到后端服务的配置步骤详解,通过本文详细步骤,您可以将 Auth0 集成到 React 项目并与后端服务交互,需要的朋友可以参考下
    2024-07-07
  • React父子组件传值(组件通信)的实现方法

    React父子组件传值(组件通信)的实现方法

    本文主要介绍了React父子组件传值(组件通信)的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 解决webpack -p压缩打包react报语法错误的方法

    解决webpack -p压缩打包react报语法错误的方法

    这篇文章主要给大家介绍了关于解决webpack -p压缩打包react报语法错误的方法,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • React split实现分割字符串的使用示例

    React split实现分割字符串的使用示例

    当我们需要将一个字符串按照指定的分隔符进行分割成数组时,我们可以在组件的生命周期方法中使用split方法来实现这个功能,本文就来介绍一下,感兴趣的可以了解下
    2023-10-10
  • React函数组件传参的实现

    React函数组件传参的实现

    React函数组件通过接受props实现组件间的数据传递,通过组件标签的属性向子组件传递数据,并在子组件中通过参数接收,还可以使用ES6的解构赋值,函数也能作为props传递,以实现父子组件间的交互和通信,下面就来具体了解一下
    2024-09-09
  • React hooks使用方法全面汇总

    React hooks使用方法全面汇总

    这篇文章主要介绍了react hooks实现原理,文中给大家介绍了useState dispatch函数如何与其使用的Function Component进行绑定,实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • react中实现修改input的defaultValue

    react中实现修改input的defaultValue

    这篇文章主要介绍了react中实现修改input的defaultValue方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • React使用Redux Toolkit的方法示例

    React使用Redux Toolkit的方法示例

    Redux Toolkit可以帮助开发者更快速、更高效地编写Redux应用,本文主要介绍了React使用Redux Toolkit的方法示例,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04

最新评论