gpt4 book ai didi

javascript - React 使用 debounce 和 setState

转载 作者:行者123 更新时间:2023-12-02 21:23:48 25 4
gpt4 key购买 nike

背景

假设我们都知道 lodash 中的 debounce 函数。

如果用户快速输入1121231234,它允许我们继续在一定的延迟时间后仅发出一次警报,使用 1234

这非常用于减少请求量,以进行优化。

<小时/>

描述

对于普通的输入字段,我们可以使用这种debounce并且它可以工作。

问题:一旦我们在带有 debounce 的同一回调中添加 setStatedebounce 将不会正常工作。

有人知道原因吗

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>
);
}

Edit flamboyant-field-equct

最佳答案

试试这个(使用 useCallback):

import React, { useState, useCallback } from "react";
import "./styles.css";
import { debounce } from "lodash";

const request = debounce(value => {
alert(`request: ${value}`);
}, 1000);

export default function App() {
const [input, setInput] = useState("");

const debouceRequest = useCallback(value => request(value), []);

const onChange = e => {
debouceRequest(e.target.value);
setInput(e.target.value); // Remove this line will lead to normal denounce
};

return (
<div className="App">
<input onChange={onChange} />
</div>
);
}

Edit elated-dawn-lb5ex

关于javascript - React 使用 debounce 和 setState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60789246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com