vue3 customRef

1、customRef 用于自定义返回一个ref对象,可以显式地控制依赖追踪和触发响应,接受工厂函数

2、两个参数分别是用于追踪的 track 与用于触发响应的 trigger,并返回一个一个带有 get 和 set 属性的对象

 

<template>
  <!--vue3的组件模版结构可以没有根标签-->
  <input v-model="keyWord"/>
  <h3>{{ keyWord }}</h3>
</template>

<script>
import { ref, customRef} from 'vue';
export default {
  name: 'App',
  setup(){
    // let keyWord = ref('hello'); //使用vue提供的内置ref,
    let keyWord = myRef('hello'); //使用自定义ref
    //自定义ref(customRef)
    function myRef(value){
      return customRef((track, trigger) => {
         let timer;
         return {
           get(){
              console.log(`从myRef这个容器读取数据,data:${value}`);
              track(); //通知追踪value的变化(跟getter商量一下让它明确你这个value是有用的)
              return value; //读取的时候就会调用get
           },
           set(nv){
             console.log(`myRef容器中的数据被修改,data改为${nv}`);
             clearTimeout(timer);
             timer = setTimeout(() => {
               value = nv;
               trigger(); //trigger通知vue重新解析模版 //防抖
             },1000);
           }
         }
      });
    }
    return {
      keyWord,
    }
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

 

posted @ 2022-02-18 16:55  青幽草  阅读(185)  评论(0编辑  收藏  举报