Vue customRef

customRef 是 Vue 3 中的一个高级响应式 API,用于创建自定义的响应式引用(ref),允许开发者对依赖追踪和更新触发过程进行细粒度控制。它通过一个工厂函数接收 tracktrigger 两个函数,返回一个包含 getset 方法的对象,从而实现灵活的响应式逻辑。‌

基本用法

customRef 的核心是自定义依赖管理:

  • 工厂函数 ‌:接收 track(用于收集依赖)和 trigger(用于触发更新)作为参数。
  • 返回对象 ‌:必须包含 get 方法(读取值时调用 track 收集依赖)和 set 方法(设置值时调用 trigger 触发更新)。‌

基础示例:

复制代码
const customRefValue = customRef((track, trigger) => {
  let value = 0;
  return {
    get: () => {
      track(); // 收集依赖
      return value;
    },
    set: (newValue) => {
      value = newValue;
      trigger(); // 触发更新
    }
  };
});
复制代码

主要应用场景

customRef 适用于需要精细控制响应式行为的场景:

  • 防抖/节流 ‌:在设置值后延迟触发更新,避免频繁响应。例如,实现输入防抖:

    复制代码
    function useDebouncedRef(value, delay) {
      let timer;
      return customRef((track, trigger) => ({
        get: () => {
          track();
          return value;
        },
        set: (newValue) => {
          clearTimeout(timer);
          timer = setTimeout(() => {
            value = newValue;
            trigger();
          }, delay);
        }
      }));
    }
  • 与外部状态集成 ‌:如本地存储(localStorage)同步:

    复制代码
    复制代码
    function useLocalStorage(key, initialValue) {
      return customRef((track, trigger) => ({
        get: () => {
          track();
          return localStorage.getItem(key) ?? initialValue;
        },
        set: (value) => {
          localStorage.setItem(key, value);
          trigger();
        }
      }));
    }
  • 性能优化‌:通过浅层响应式避免不必要的深层转换,适用于大型数据结构。‌

ref 的区别

  • ref 提供基础响应式包装,自动处理深层转换,适合常规场景。
  • customRef 允许手动控制依赖追踪和更新时机,更灵活但需谨慎使用,例如避免在 getter 中返回新对象导致不必要的重新渲染。‌

注意事项

  • 依赖管理 ‌:确保在 get 中调用 track,在 set 中调用 trigger,否则响应式失效。
  • 副作用处理 ‌:结合 effectScope 等 API 管理副作用生命周期,避免内存泄漏。‌

通过 customRef,开发者可以构建高度定制化的响应式逻辑,提升应用性能或实现复杂交互。

相关推荐
雪碧聊技术2 小时前
登录页【电影画风视频背景】实现
vue.js·视频背景·video标签
xhxxx2 小时前
别再让 AI 自由发挥了!用 LangChain + Zod 强制它输出合法 JSON
前端·langchain·llm
指尖跳动的光2 小时前
判断页签是否为活跃状态
前端·javascript·vue.js
用泥种荷花2 小时前
【前端学习AI】大模型调用实战
前端
Lan.W2 小时前
element UI + vue2 + html实现堆叠条形图 - 横向分段器
前端·ui·html
FAQEW2 小时前
若依(RuoYi-Vue)单体架构实战手册:自定义业务模块全流程开发指南
前端·后端·架构·若依二开
神算大模型APi--天枢6463 小时前
合规与高效兼得:国产全栈架构赋能行业大模型定制,从教育到工业的轻量化落地
大数据·前端·人工智能·架构·硬件架构
千寻girling3 小时前
马上元旦节了,手写一个《前端脚手架》庆祝一下 !
前端
嚣张丶小麦兜3 小时前
认识vite
前端·javascript·vue.js