【发布时间】:2020-07-02 11:32:42
【问题描述】:
背景
假设我们都知道lodash 中的debounce 函数。
如果用户快速输入1,12,123,1234,它允许我们在一定的延迟时间后只使用1234进行一次警报。
这很习惯于减少请求量,用于优化。
说明
对于一个普通的输入框,我们可以使用那种debounce,它可以工作。
问题:一旦我们在与debounce 相同的回调中添加setState,debounce 将无法正常工作。
有人知道原因吗?
import React, { useState } from "react";
import "./styles.css";
import { debounce } from "lodash";
export default function App() {
const [input, setInput] = useState("");
const debouceRequest = debounce(value => {
alert(`request: ${value}`);
}, 1000);
const onChange = e => {
setInput(e.target.value); // Remove this line will lead to normal debounce
debouceRequest(e.target.value);
};
return (
<div className="App">
<input onChange={onChange} />
</div>
);
}
【问题讨论】:
标签: javascript reactjs lodash debounce