# customRef

# 作用:创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显示控制

# 实现防抖效果

<template>
  <input type="text" v-model="keyword" />
  <h3>{{keyword}}</h3>
</template>
<script>
  import { ref, customRef } from "vue";
  export default {
    name: "App",
    setup() {
      function myRef(value, delay) {
        let timer = null;
        return customRef((track, trigger) => {
          return {
            get() {
              console.log(`有人从myRef这个容器中读取数据了,我把${value}给他了`);
              track(); // 通知Vue追踪value的变化(相当于提前和get商量一下,让他认为这个value是有用的)
              return value;
            },
            set(newValue) {
              console.log(`有人把myRef这个容器中的数据改为了:${newValue}`);
              clearTimeout(timer);
              timer = setTimeout(() => {
                value = newValue;
                trigger(); // 通知Vue去重新解析模板
              }, delay);
            },
          };
        });
      }

      const keyword = myRef("hello, 500);
      return { keyword };
    },
  };
</script>
Last Updated: 8/14/2023, 2:43:08 PM