React使用 lodash-es 中的throttle方法失效
下面代码用了throttle方法,但是并没有实现1500内执行一次的效果,主要原因是useState的setValue()方法
该方法更新了state,导致了组件重新渲染,并且重新生成了函数,所以1500毫秒又被重置了
javascript
// ****** 错误 ******
const onAction = throttle(async () => {
const params = {};
const res = await API.loanSubmitSubmitApi(params);
if (res.code === 200) {
setValue('XXXX')
}
}, 1500);
// ****** 正确 ******
// 这里为什么步用useCallback,具体原因没细究,我看到相关issue的回答就是改成useMemo.
// 如果需要用到load接口中的数据并且数据存在state中,这里的依赖项就应该是[loadData],不添加依赖项的话,会获取不到load的接口数据
const onAction = useMemo(
() =>
throttle(async () => {
const params = {};
const res = await API.xxxxxApi(params);
if (res.code === 200) {
setValue("XXXX");
}
}, 1500),
[]
);