Vue中的customRef函数如何使用

其他教程   发布日期:2024年11月30日   浏览次数:199

这篇文章主要介绍了Vue中的customRef函数如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue中的customRef函数如何使用文章都会有所收获,下面我们一起来看看吧。

  1. ref
  1. Vue
官方提供的
  1. componsition API
,将一个非响应式数据转变为响应式数据的函数,至于底层怎么实现数据的收集与响应式

使用者无需去关注,相当于就是精装电脑,然而有时候,针对一些复杂特殊的需求,我们需要自己造轮子,自己手动原生的去实现内部结构。

实现基础的功能的同时,还要进行额外的拓展,那么这时候就需要自定义

  1. ref
了的,它就相当于是组装式的电脑,内部结构需要自己去组装、实现。

而非直接从商城里购买,用一些现成的零部件组装一个类似精装的电脑,甚至还可以进行拓展,在实现一个定制化复杂的功能需求时,这个自定义

  1. ref
就很有用。

示例-延迟显示

想要在

  1. input
中实现一个数据的实时收集与实时展示,需要使用
  1. v-model
指令

  1. <template>
  2. <input type="text" v-model="keyword" />
  3. <h4>{{keyword}}</h4>
  4. </template>
  5. <script setup>
  6. import { ref } from "vue";
  7. let keyword = ref("itclanCoder"); // Vue官方提供的ref函数,返回一个响应式数据
  8. </script>

现在不能用官方提供的

  1. ref
函数,也就是自己要自顶一个类似
  1. ref
函数,如下所示

  1. <template>
  2. <input type="text" v-model="keyword" />
  3. <h4>{{keyword}}</h4>
  4. </template>
  5. <script setup>
  6. import { customRef } from 'vue';
  7. // 自定义的一个ref,名为myRef,自定义ref就是一个函数
  8. function myRef(value) {
  9. // 自定义,自己得写逻辑,customRef必须要传入一个函数,而且函数里面必须要返回一个对象
  10. return customRef((track,trigger) => { // 第一个return 是把自定义的内容返回出去,第二个return 是返回里面的逻辑,返回get,和set
  11. return {
  12. get() { // 读取数据,这个value是初始化传递过来的数据
  13. console.log('get',`${value}`);
  14. track(); // 追踪一下数据的改变,通知vue最终value数据的变化,提前和get沟通一下,让value是有作用的
  15. return value
  16. },
  17. set(newValue) { // 设置数据,新的值,修改数据
  18. value = newValue;
  19. trigger(); // customRef函数内接收两个参数,一个是track,另一个就是trigger,通知vue去重新解析模板
  20. }
  21. }
  22. });
  23. }
  24. let keyword = myRef("itclanCoder"); // 自己定义一个ref
  25. </script>

通过上面的方式就可实现自定义数据的收集和展示,如果想要等待几秒后,触发,那么只需要在

  1. set
加一个定时器就够了的,其他不变

  1. set(newValue) {
  2. setTimeout(() => {
  3. value = newValue;
  4. trigger(); // 通知vue去重新解析模板
  5. },500)
  6. }

解决持续回显,误触发的问题,定时器一直开通的问题

  1. <template>
  2. <input type="text" v-model="keyword" />
  3. <h4>{{keyword}}</h4>
  4. </template>
  5. <script setup>
  6. import { customRef } from 'vue';
  7. // 自定义的一个ref,名为myRef,自定义ref就是一个函数
  8. function myRef(value) {
  9. let timer; // 开启一个定时器
  10. // 自定义,自己得写逻辑,customRef必须要传入一个函数,而且函数里面必须要返回一个对象
  11. return customRef((track,trigger) => { // 第一个return 是把自定义的内容返回出去,第二个return 是返回里面的逻辑,返回get,和set
  12. return {
  13. get() { // 读取数据,这个value是初始化传递过来的数据
  14. console.log('get',`${value}`);
  15. track(); // 追踪一下数据的改变,通知vue最终value数据的变化,提前和get沟通一下,让value是有作用的
  16. return value
  17. },
  18. set(newValue) { // 设置数据,新的值,修改数据
  19. clearInterval(timer); // 先清除定时器,在开
  20. timer = setTimeout(() => {
  21. value = newValue;
  22. trigger(); // customRef函数内接收两个参数,一个是track,另一个就是trigger,通知vue去重新解析模板
  23. },500)
  24. }
  25. }
  26. });
  27. }
  28. let keyword = myRef("itclanCoder"); // 自己定义一个ref
  29. </script>

这个

  1. customRef
比较难以理解的是,它需要在自定义
  1. ref
函数中返回出去,同时,接收一个工厂函数作为参数,这个工厂函数接受
  1. track
  1. trigger
两个函数

作为参数,并返回一个带有get和set方法的对象

一般来说,

  1. track()
  1. get()
方法中的返回值前进行调用,追踪一下数据的改变,通知
  1. vue
最终数据的变化,而
  1. trigger()
函数则应该在
  1. set()
函数的末尾调用

通知

  1. vue
去重新解析模板,更新页面数据

最后就是实现等待多长时间,稍后显示,使用一个定时器去实现,解决频繁误触发的问题,常规的解决办法,先清除定时器,然后在开启定时器。

以上就是Vue中的customRef函数如何使用的详细内容,更多关于Vue中的customRef函数如何使用的资料请关注九品源码其它相关文章!