Vue —— 实用的工具函数

打印 上一主题 下一主题

主题 1607|帖子 1607|积分 4821

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
相应式数据管理

1. toRef 和 torefs

作用: 将相应式对象的属性转换为 ref,保持解构后的相应性
场景: 解构 reactive 对象时避免丢失相应性
示例:
  1. import { reactive, toRef, toRefs } from 'vue';
  2. const state = reactive({ x: 1, y: 2 });
  3. // 解构单个属性
  4. const xRef = toRef(state, 'x');  // xRef.value 始终同步 state.x
  5. // 解构所有属性
  6. const { y } = toRefs(state); // y.value 同步 state.y
复制代码
2. shallowRef 和 shallowReactive

作用: 创建浅层相应式数据(只跟踪顶层的属性变革)。
场景: 优化性能,避免深度监听大对象
示例:
  1. const shallowState = shallowReactive({
  2.         nested: { data : 'value' }  // 修改 nested.data 不会触发响应式更新
  3. })
  4. const shallowCount = shallowRef({ value : 0 });
  5. shallowCount.value.value = 1; // 不会触发响应式更新
复制代码
3. markRaw

作用: 标记对象为 “ 非相应式 ”,避免被 Vue 转换为署理。
场景: 处置惩罚第三方库对象或性能敏感数据。
示例:
  1. const rawObject = markRaw({ data : 'static' });
  2. const state = reactive({ rawObject }); // rawObject 不会被代理
复制代码
依赖追踪与副作用

1. computed

作用: 创建依赖其他相应式数据的盘算属性。
场景: 缓存复杂盘算结果,避免重复盘算
示例:
  1. const count = ref(0);
  2. const doubled = computed(()=> count.value * 2);
  3. console.log(doubled.value);  // count 变化后自动更新
复制代码
2. watch 和 watchEffect

作用: 监听数据变革并实行副作用


  • watch: 显式指定监听目标
  • watchEffect: 主动追踪依赖
示例:
  1. const count = ref(0);
  2. // 监听 count 变化
  3. watch(count, (newVal, oldVal)=>{
  4.         console.log(`Count changed from ${oldVal} to ${newVal}`)
  5. });
  6. // 自动追踪依赖
  7. watchEffect(() => {
  8.         console.log(`Count is ${count.value}`);
  9. })
复制代码
类型判断与优化

1. unref

作用: 快速获取 ref 的值(如果是 ref 返回 .value,否则返回原值)。
场景: 简化 ref 宁静常值的混合处置惩罚
示例:
  1. const x = ref(10);
  2. const rawValue = 20;
  3. console.log(unref(x));    // 10 不用x.value
  4. console.log(unref(rawValue)); // 20
复制代码
2. isRef 、isReactive 和 isProxy

作用: 判断变量类型


  • isRef(value): 是否为 ref 对象
  • isReactive(value): 是否为 reactive 创建的相应式对象
  • isProxy(value): 是否为 reactive 或 readonly 署理
示例:
  1. const count = ref(0);
  2. const state = reactive({ x: 1 });
  3. console.log(isRef(count));      // true
  4. console.log(isReactive(state)); // true
  5. console.log(isProxy(state));    // true
复制代码
组件通信与生命周期

1. provide 和 inject

作用: 跨层级组件通报数据
场景: 避免逐层通报 props
示例:
  1. // 父组件
  2. import { provide } from 'vue';
  3. provide('theme', 'dark');
  4. // 子组件
  5. import { inject } from 'vue';
  6. const theme = inject('theme', 'light'); // 默认值 'light'
复制代码
2. nextTick

作用: 在 DOM 更新后实行回调
场景: 操作更新后的 DOM 元素
示例:
  1. import { nextTick } from 'vue';
  2. const updateData = async () => {
  3.         data.value = 'new value';
  4.         await nextTick();
  5.         console.log('DOM 已更新');
  6. }
复制代码
高级工具

1. useAttrs 和 useSlots

作用: 在 script setup 中访问组件的 attrs 和 slots
场景: 处置惩罚未声明为 props 的属性或动态插槽
示例:
  1. <script setup>
  2. import { useAttrs, useSlots } from 'vue';
  3. const arrts = useAttrs();  // 获取所有非 props 属性
  4. const slots = useSlots();  // 获取插槽内容
  5. <script>
复制代码
总结:合理利用这些工具,可以大幅度提拔代码的简洁性和可维护性,同时避免常见的相应式陷阱

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表