1. }
  2. export const user: {name: string, age: number}[] = [
  3. {name: 'lucy', age: 18}
  4. ]
  5. // 泛型
  6. export function useArray<T>(initialArray: T[]) {
  7. return {
  8. add: (item: T) => 100
  9. }
  10. }

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