react-hooks - 当我使用错误的方式编写 useDebounce 时,我也得到了正确的值??有人知道为什么
问题描述
像这样的代码:
import React , { useEffect, useState, useMemo, useRef, useCallback } from 'react';
import './App.scss';
function debounce(fn, ms) {
let timer;
return function(...args) {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
fn(...args)
}, ms);
}
}
function useDebounce(fn, time) {
console.log('usedebounce')
return debounce(fn, time);
}
const App = () => {
const [counter1, setCounter1] = useState(0);
const [counter2, setCounter2] = useState(0);
const handleClick = useDebounce(function() {
console.count('click1')
setCounter1(counter1 +1);
}, 500)
useEffect(function() {
const t = setInterval(() => {
setCounter2(x => x + 1)
}, 500);
return clearInterval.bind(undefined, t)
}, [])
return <div style={{ padding: 30 }}>
<button
onClick={function() {
handleClick()
}}
>click</button>
<div>{counter1}</div>
<div>{counter2}</div>
</div>}
(1) 当我运行此代码时,Counter1 得到一个正确的值(单击 ms 时间 => 值 +1 后)。为什么是正确的值?我的意思是值应该是 click => value +1 而不是 click ms time => value +1
(2) 当我使用 setCounter(x = > x+1) 替换 setCounter(counter1+1) 时。结果在 ms timer 之后,控制台单击了时间值。我很混乱
谁能告诉我原因?谢谢
解决方案
推荐阅读
- python-3.x - Django 如何创建 Pip 和 Piplock 文件?
- javascript - OnClick 功能不会在
- swift - 在 Swift 上发出多个网络请求
- python - 将对称 Pandas 数据框中的索引、列和值分成三个不同的列,不重复
- php - 基于 WooCommerce 购物车中某个类别的商品数量的折扣
- python - 尝试在 pygame 中播放动画会导致错误
- python - tqdm.notebook 在 jupyter notebook 中显示带有“HBox”而不是进度条的消息
- python - 在 PyCharm 中将库从全局站点包移动到虚拟环境
- python - 数据被截断:无法滚动以捕获所有数据 Selenium Python
- javascript - 如何让 webpack 忽略库依赖?