javascript - 仅执行一定时间的点击而不累积事件

标签 javascript reactjs lodash

我正在尝试使用 native javascript localstorage api (或 npm 上的任何 React 本地存储模块)将输入字段保存到本地存储,但在实现保存到本地存储的代码时遇到了一些麻烦距离最后输入的字母至少有 5 秒的间隔。

import React, { Component } from 'react';
import throttle from 'lodash/throttle';

class Something extends Component {
  state = { inputValue: "" };

  handleChange = () => {
    this.changeState();
  }

  changeState = throttle(
    newValue => {
      this.setState({ inputValue: newValue });
      console.log('executed!');
    },
    5000
  );

  render() {
    return (
      <div>
        <input type="text" 
          value={this.state.inputValue} 
          placeholder="Type something here" 
          onChange={this.handleChange} 
        />
      </div>
    );
  }
};

问题在于,changeState() 方法在 5 秒后成功执行,但随后会根据您垃圾邮件的点击次数再次执行。有什么方法可以防止这种情况发生?

最佳答案

你想要去抖。当您对函数进行反跳操作时,它只会在上次调用该函数后的一定时间内执行该函数。如果再次调用它,则计时器在执行之前重置。 Lodash 有一个去抖方法。您希望将 save 方法反跳 5000 毫秒,然后在每次用户更改输入时调用该函数,然后如果他们停止输入 5 秒,就会调用 save。以下是 lodash debounce 的文档 https://lodash.com/docs/4.17.4#debounce

关于javascript - 仅执行一定时间的点击而不累积事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46076558/

相关文章:

node.js 错误 : Cannot find module 'lodash.assign'

javascript - 我无法让 php 使用 onclick() 进行重定向

javascript - React 克隆组件(无状态或有状态)传递额外的 props

javascript - 使用 lodash 选择没有周围对象的值

javascript - React Native/React - 在 render() 之前重构 prop

javascript - 弹出窗口未显示在表行内的按钮中

javascript - 过滤嵌套数组并与父对象一起更新数组 - JS

javascript - Node.JS 和 Object.Keys 与 json

javascript - jQuery 附加 html 问题

javascript - 为什么浏览器会自动向下滚动到 '#hashhyperlinks',我们如何才能阻止它?