react native实现防抖,TextInput输入实现防抖处理

react natvei 实现防抖 (debounce)

防抖处理是经常会用到的功能,比如处理滚动事件做一些复杂计算,这样就会频繁调用回调函数很容易会造成页面的卡顿,这种情况下,我们更希望把多次计算合并成一次,只操作一个精确点,我们普遍把这种方式称为debounce(防抖)和throttle(节流)。

当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定时间到来之前,又触发了事件,就重新开始延时。也就是说当一个用户一直触发这个函数,且每次触发函数的间隔小于设定时间,那么防抖的情况下只会执行一次。

把防抖封装成一个插件,每次使用只需要调用即可。
// debounce.js  防抖封装

let timeout = null
const debounce = (cb, wait = 500) => {
  if (timeout !== null) clearTimeout(timeout)
  timeout = setTimeout(() => {
    timeout = null
    cb && cb()
  }, wait);
}
module.exports = debounce;
我们可以放在App.js全局调用,省掉每次都需要import导入
 // App.js

 // 在app.js引入文件
import debounce from './src/utils/debounce'; 

// 定义一个全局变量debounce
global.debounce = debounce // 防抖 默认1000毫秒 使用方法 debounce(() => this.handle())
我们也可以在文件中单独引用,直接在页面头部引用
// home.js
import debounce from './src/utils/debounce';   // 引入

使用方法

注意:当前的debounce已经在App.js定义成全局变量,如果未定义需要单独引用
import React, { Component } from 'react'
import {
  Text,
  View,
  TextInput
} from 'react-native'

// 防抖测试
export default class Home extends Component {
  constructor(props) {
    super(props);
    this.state = {
      text: '',
      changeText: ''
    }
  }

  // 数据处理
  requstData = () => {
    this.setState({
      changeText: this.state.text
    })
  }

  inputValue = (text) => {
    this.setState({
      text: text
    })

    // 使用防抖
    debounce(() => this.requstData(), 500)
  }

  render() {
    return (
      <View style={{ flex: 1 }}>
        <Text style={{ fontSize: 20, color: '#000', fontWeight: 'bold' }}>防抖</Text>
        <TextInput
          style={{ height: 40, borderColor: 'gray', borderWidth: 1 }}
          onChangeText={(text) => this.inputValue(text)}
          value={this.state.text}
        />
        <Text style={{ marginTop: 50, fontSize: 20, color: 'blue', fontWeight: 'bold' }}>
          防抖效果:{this.state.changeText}
        </Text>
      </View>
    );
  }
}


效果

debounce.gif
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 最近和前端的小伙伴们,在讨论面试题的时候。谈到了函数防抖和函数节流的应用场景和原理。于是,想深入研究一下两者...
    youthcity阅读 23,633评论 5 78
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,145评论 1 32
  • 长久以来,面向对象在 JavaScript 编程范式中占据着主导地位。不过,最近人们对函数式编程的兴趣正在增长。函...
    神刀阅读 486评论 0 0
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,543评论 1 11
  • 随着时代发展,互联网进入千家万户,物联网渗透到我们的日常生活。前段时间,有公司推销他们的线上课程,打听了一...
    菲儿dancer阅读 981评论 0 3