import React, { useState, useEffect } from 'react';
import _ from 'lodash'

// 防抖案例
// 比如说搜索功能。他是把上一次的id值清空, 每隔多少秒再去请求后台
let id = ''

export default function Debounce() {

  //防抖 触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间
  // const onChange = event => {
  //   const values = event.target.value

  //   id && clearTimeout(id)

  //   id = setTimeout(() => {
  //     console.log('请求后台', values)
  //   }, 500)
  // }

  //节流   连续触发事件,但是在 n 秒中只会执行一次函数
  //判断如果id值为空,就进入,然后把settimeout值赋值给id,  在settimeout里把id值清空。 每隔多少秒去请求一次后台。
  const onChange = event => {
    const values = event.target.value

    if (!id) {
      id = setTimeout(() => {
        id = null
        console.log('请求后台', values)
      }, 500)
    }
  }
  //防抖
  const debounce = _.debounce(() => console.log('防抖'), 3000)  
  //节流  trailing设置过期时间 最后一次没够多少秒。他也会输出一次
  const throttle = _.throttle(() => console.log('节流') , 3000, { trailing: true })

  return (
    <div>
     <input type="text" onChange={onChange} />

     <input type="text" onChange={throttle} />
    </div>
  );
}

  

posted on 2020-06-16 19:55  姓叶,名铁柱  阅读(266)  评论(0编辑  收藏  举报