91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react組件封裝input框的防抖怎么處理

發布時間:2023-04-27 11:13:00 來源:億速云 閱讀:123 作者:zzz 欄目:開發技術

今天小編給大家分享一下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框的防抖怎么處理”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石嘴山市| 昌宁县| 北京市| 疏勒县| 沙洋县| 万荣县| 福海县| 徐闻县| 昌黎县| 沙坪坝区| 乐东| 宁城县| 鄂尔多斯市| 四平市| 和林格尔县| 章丘市| 崇礼县| 永康市| 渝北区| 红原县| 佛冈县| 开封县| 积石山| 依安县| 南昌市| 松溪县| 新绛县| 大田县| 枞阳县| 海安县| 清水河县| 肇源县| 宜兰县| 景东| 湘潭市| 繁峙县| 宜宾市| 安国市| 武山县| 陆丰市| 平山县|