}export const user: {name: string, age: number}[] = [ {name: 'lucy', age: 18}]// 泛型export function useArray<T>(initialArray: T[]) { return { add: (item: T) => 100 }}
useDebounce
function debounce(callback, ms=100) {
let timeout
return (...rest) => {
if(timeout) {
clearTimeout()
}
// 只有最后的定时器能保留下来,因为最后的没有人清理
timeout = setTimeout(() => {
callback && callback(...rest);
}, ms)
}
}
export function useDebounce(value, ms) {
const [state, setState] = useState(ms);
useEffect(update, [value, ms]);
function update() {
// 每次 value值变化时,设置一个定时器
const timeout = setTimeout(() => {
setState(value)
}, ms);
// 每次上一个 useEffect处理完成后,销毁定时器 componentWillUnmount
return () => {
clearTimeout(timeout);
}
}
return state
}
// 当值改变是,就触发请求
const debounceParams = useDebounce(params, 500)
function getQuery() {
useEffect(() => {
// const params = queryString.stringify(cleanObject(params))
// $axios.get(`user/?${params}`)
// $axios.post('/user', debounceParams)
}, [debounceParams])
}