vuejs-challenges icon indicating copy to clipboard operation
vuejs-challenges copied to clipboard

23 - custom ref

Open alirezamou opened this issue 1 year ago • 1 comments

<script setup>
import { watch, isRef, unref, computed, ref } from "vue"

/**
 * Implement the function
*/
function useDebouncedRef(value, delay = 200) {
  let rawValue = isRef(value) ? value.value : value;
  const rawValueRef = ref(rawValue);
  let timerId;
  return computed({
    get: () => rawValueRef.value,
    set: (newValue) => {
      clearTimeout(timerId);
      timerId = setTimeout(() => rawValueRef.value = newValue, delay);
    }
  });
}
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>

alirezamou avatar Sep 24 '23 07:09 alirezamou

isRef可以使用unref更好

undefined-zzk avatar Feb 04 '24 02:02 undefined-zzk

这里好像并不需要判断是否为原始值,ref可以接受另一个ref

slowpack avatar Feb 21 '24 07:02 slowpack