React防抖

该博客展示了在React的类组件和函数组件中如何实现防抖(debounce)技术,以提高性能。在类组件中,作者分别演示了自定义防抖函数和使用lodash库的防抖函数来更新状态。而在函数组件中,利用`useCallback`和`useEffect`配合lodash的防抖函数来实现相同功能。通过防抖,可以限制函数的调用频率,避免在高频事件(如点击)中频繁触发状态更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class类组件 防抖的使用

import React, { Component } from 'react'
import {debounce} from 'lodash'

import { Button } from 'antd'

export default class TestClass extends Component {
  state = {
    value:0
  }

  // 自己的防抖
  dbclick = ()=> {
    if(this.time) clearTimeout(this.time)
    this.time = setTimeout(this.handlerClick,500)
  }
  handlerClick = ()=>{
    const newvalue= this.state.value+1
    this.setState({value:newvalue})
    clearTimeout(this.time)
  }

  // lodash 的防抖
  debounceClick = ()=>{
    if(!this.mydebounce){
      this.mydebounce = debounce(this.add,500)
    }
    this.mydebounce()
  }
  add = ()=>{
    const newvalue= this.state.value+1
    this.setState({value:newvalue})
  }

  render() {
    return (
      <div>
          {this.state.value}
          <Button type="primary" onClick={this.dbclick}>原生 click</Button>
          <br/>
          <Button type="primary" onClick={this.debounceClick}>lodash click</Button>
      </div>
    )
  }
}

函数组件防抖的使用

import React, { useCallback, useEffect, useState } from "react";
import { debounce } from "lodash";

export default function App() {
  const [value, setValue] = useState(0);
  const dbclick = ()=>{
    const click =debounce(() => setValue(value + 1), 500)
    click()
  }
   
  return <button onClick={()=>{
    dbclick()
  }}>{value}</button>;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值