Skip to content

23 - 自定义ref #3142

@izilongwan

Description

@izilongwan
<script setup>
import { watch, customRef, ref } from "vue"

/**
 * Implement the function
*/
function useDebouncedRef(value, delay = 200) {
  const v = ref(value);
  let t;
  return new Proxy(v, {
    get(target, key) {
      return Reflect.get(target, key);
    },
    set(target, key, value) {
      clearTimeout(t);
      t = setTimeout(() => {
        Reflect.set(target, key, value);
      }, delay)
      return true;
    }
  })
}
const text = useDebouncedRef("hello")

/**
 * Make sure the callback only gets triggered once when entered multiple times in a certain timeout
*/
watch(text, (value) => {
  console.log(value)
})
</script>

<template>
  <input v-model="text" />
</template>

https://play.vuejs.org/#eNqtVdtu2zgQ/ZVZvUQOFDnY3ads0r32oYvttmiKPulFkcc2a4oUyJEvCPzvPSQl2QnaAi1qwJA41zMzZ6jH7M+uK7c9ZzfZrW+c6oQ8S9+9qIxqO+uEHmlXS7MuqOm92PYdLwtyvKQjLZ1tqcrgXWWVqcz88rIydEmv2k5zy0ZI1kzL3jSiLPSX88qMJ+o9/8MPFkdeIGa+rXXPBS1Y1we6o5+vr69n9Ih41FjjhbYQIm2ym/0WFJqRIb45QHaGDO/orbP7Q74tki/RiiWX2uFR0IYPQ8zwG5yQXHMj5XPDGJjoWKQnunKuLigBOYVrNNfuvWrZ9rAc3YkEwOE8avIZ3b04edGU/wsJpjjHoTmzZ/jF9TxiDY8jDPCSuia8D/mfN7vK1qy1rTLYnub2ut4w+d5xnFtTa/1QNxuyRh9CGz1SqdWKHS8ga5h2azaEMUdJ22tRmDsJCvWkDNXUsJMab0GE2hMDIpvyAKygYZpTRwJoq7nUdjWoUAv+t/PETbASB2EQrBbGiehWma4HPa5ai/bcVVmIXGU0h/Z2fmaaFZkyC96Xwl5K8WD8xPAWrZETo/8ApeHq5aoXpX1g92S64ADlAVRVKID3HWaHWamzfVDBNa3E4IYlG7XlfNi4ZDDtQ5xtPnTqhkzfPrAb6PWU3q3ynOeO0antWe8iRUeWDdpibH0kzcCMCl1INYAHaamvsFlVhnmcwimB1q9trxe0s24T1LU/mOYJgcMKdk4Z+c+uwLOLiyQ+myOkW1UuTZ7jcEMeHDKrpztwFgA2v5di76NVPsO7U20+UD7gP8UX2rm669jBLc4vR2Mni3pXq8miXGLyKCdSBaQPu/Yh0GtchJ/iJgS/NNB8hDQDmNeBsK+MVobvTd2hJ5JfYHrZxeCTcqUB4t765kgjhBDvG9FjMnrxHeDPU/6IEgYcKVzkGf7YOPEY1VKtyo/eGmxcnDlYZ9tOaXZvusB9LNjNyIYqw7Vjd/9GWbjahusXPmtuNp+Rf/T7IKuytyA9uy0Wa9Kl+zSpX97/H2+GSYkLo9ew/oryXVgj3AH4ekWzv3qzAOwzu4gWHzxsORj73r/cCxs/FhWAxo5E+/ip/PsrpZ/g/lL+Gv3QyOz4CRQ1jQ4=

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions