美文网首页
react native实现防抖,TextInput输入实现防抖

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

作者: smallzip | 来源:发表于2019-07-29 15:27 被阅读0次

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

相关文章

  • react native实现防抖,TextInput输入实现防抖

    react natvei 实现防抖 (debounce) 防抖处理是经常会用到的功能,比如处理滚动事件做一些复杂计...

  • vue3常用指令

    防抖 输入框防抖 防抖这种情况设置一个v-throttle自定义指令来实现 图片懒加载 设置一个v-lazy自定义...

  • 前端性能优化:手写实现节流防抖

    前端性能优化:手写实现节流防抖 本文首发于 前端性能优化:手写实现节流防抖[https://gitee.com/r...

  • 深入JavaScript Day32 - 手写防抖函数debou

    一、防抖函数代码实现 防抖:适用于高频函数的【延迟执行】,比如搜索框的联想功能 0、测试代码 1、最基本的防抖函数...

  • 防抖函数及其应用

    建议使用 lodash 插件里面的 debounce 函数来实现 1、防抖函数简单原理 2、防抖函数的应用

  • JS笔试题

    JavaScript 笔试部分 实现防抖函数(debounce) 防抖函数原理:在事件被触发 n 秒后再执行回调,...

  • 准备:深拷贝、防抖、节流

    深拷贝 JSON 转换 如果对象中有函数、undefind,无法拷贝出 普通递归函数实现 防抖 防抖的原理就是:触...

  • 实现js防抖

    防抖(debounce) 第一步 实现一个函数,返回一个函数func参数,第一个参数是一个函数,第二个参数是一个数...

  • 分享:22道JavaScript高频手写面试题

    JavaScript笔试部分 实现防抖函数(debounce) 防抖函数原理:在事件被触发n秒后再执行回调,如果在...

  • 防抖和节流的区别和实用场景

    防抖和节流 防抖:单位时间内事件触发会被重置,避免事件被误伤触发多次。代码实现重在清零 clearTimeout。...

网友评论

      本文标题:react native实现防抖,TextInput输入实现防抖

      本文链接:https://www.haomeiwen.com/subject/ycebrctx.html