utils.js
<pre><code>import {useState,useRef,useEffect,useCallback} from 'react'
export function deepClone(obj={}){
let newObj = null;
if(typeof(obj) === 'object' &amp;&amp; obj !== null){
newObj = obj instanceof Array ? [] : {}
for(let k in obj){
newObj[k] = deepClone(obj[k])
}
}
else{
newObj = obj
}
return newObj
}
export function useDebounce(fn,delay,dep=[]){
const {current} = useRef({
fn,
timer:null,
})
useEffect(()=&gt;{
current.fn = fn
},[fn])
return useCallback(function f(...args){
if(current.timer){
clearTimeout(current.timer)
}
current.timer = setTimeout(()=&gt;{
current.fn.call(this,...args)
},delay)
},dep)
}
export function useThrottle(fn,delay,dep=[]){
const {current} = useRef({
fn,
timer:null
})
useEffect(()=&gt;{
current.fn = fn
},[fn])
return useCallback(function f(...args){
if(!current.timer){
current.timer = setTimeout(()=&gt;{
delete current.timer
},delay)
current.fn.call(this,...args)
}
},dep)
}</code></pre>