当前位置: 首页 > wzjs >正文

租车网站建设方案网站版本功能列表

租车网站建设方案,网站版本功能列表,pHP可以做论坛网站吗,html指令代码大全watch 在 Vue 3 的 Composition API 中,watch 和 watchEffect 是用于响应式侦听数据变化的核心 API。它们都能追踪依赖并执行副作用,但在使用方式和场景上有显著差异。以下是详细解析: watch 和 watchEffect 对比 特性watchwatchEffect依赖…

watch

在 Vue 3 的 Composition API 中,watchwatchEffect 是用于响应式侦听数据变化的核心 API。它们都能追踪依赖并执行副作用,但在使用方式和场景上有显著差异。以下是详细解析:


watchwatchEffect 对比

特性watchwatchEffect
依赖收集方式显式指定侦听的数据源自动收集回调函数内的响应式依赖
立即执行默认不立即执行(可通过 immediate: true 开启)总是立即执行
旧值访问可获取旧值(oldValue无法获取旧值
适用场景需要精确控制侦听目标依赖多个数据或需要自动追踪依赖的场景

watch 的深度解析

1. 基本语法
import { watch, ref } from 'vue';const count = ref(0);// 监听单个 ref
watch(count, (newVal, oldVal) => {console.log(`count变化:${oldVal}${newVal}`);
});// 监听多个源(数组形式)
watch([count, otherRef], ([newCount, newOther], [oldCount, oldOther]) => {// 处理多个变化
});
2. 监听不同类型的数据源
  • Ref 类型

    const num = ref(0);
    watch(num, (newVal) => { /* ... */ });
    
  • Reactive 对象属性

    const state = reactive({ user: { name: 'Alice' } });
    watch(() => state.user.name, // 使用 getter 函数(newName) => { /* ... */ }
    );
    
  • 深层监听对象/数组

    watch(() => state.user,(newUser) => { /* ... */ },{ deep: true } // 深度监听嵌套属性变化
    );
    
3. 配置选项
选项说明
deep: true深度监听对象/数组的内部变化
immediate: true立即触发回调(类似 Vue 2 的 immediate
`flush: ‘pre’‘post’
watch(source,callback,{ deep: true, immediate: true, flush: 'post' }
);

watchEffect 的深度解析

1. 基本用法
import { watchEffect, ref } from 'vue';const count = ref(0);// 自动追踪依赖
watchEffect(() => {console.log(`count的值:${count.value}`);
});count.value = 1; // 输出 "count的值:1"
2. 特点
  • 自动依赖追踪:回调函数中使用的响应式变量会被自动追踪。
  • 立即执行:初始化时立即运行一次。
  • 无需指定依赖:适合依赖多个响应式变量的场景。
3. 停止侦听器

通过调用返回的函数停止侦听:

const stop = watchEffect(() => { /* ... */ });
stop(); // 手动停止侦听
4. 清理副作用

在回调中返回一个清理函数,用于重置操作(如取消请求):

watchEffect((onCleanup) => {const timer = setTimeout(() => {// 异步操作}, 1000);onCleanup(() => clearTimeout(timer)); // 清理函数
});

使用场景对比

1. 使用 watch 的场景
  • 需要精确控制侦听的目标
  • 需要获取旧值进行比较。
  • 需要延迟执行(默认不立即执行)。
  • 需要深度监听对象/数组
2. 使用 watchEffect 的场景
  • 依赖多个响应式变量且不想逐个指定。
  • 需要立即执行回调(如初始化加载数据)。
  • 逻辑简单且依赖关系动态变化。

最佳实践与注意事项

1. 避免无限循环

在回调中修改被侦听的源数据可能导致无限循环:

// ❌ 错误示例
watch(count, (newVal) => {count.value = newVal * 2; // 触发再次侦听
});
2. 性能优化
  • 减少深度监听deep: true 对性能有影响,尽量明确侦听具体属性。
  • 合理使用 flushflush: 'post' 可确保回调在 DOM 更新后执行。
3. 异步操作处理
  • 使用 onCleanup 清理未完成的异步任务(如请求取消):

    watchEffect(async (onCleanup) => {const abortController = new AbortController();onCleanup(() => abortController.abort()); // 清理时取消请求const data = await fetch(url, {signal: abortController.signal});
    });
    

完整示例

示例 1:监听搜索关键词(防抖)
<script setup>
import { ref, watch } from 'vue';const searchKeyword = ref('');
let timer = null;watch(searchKeyword, (newKeyword) => {clearTimeout(timer);timer = setTimeout(() => {fetchResults(newKeyword); // 防抖处理}, 500);
});
</script>
示例 2:自动追踪窗口尺寸
<script setup>
import { watchEffect } from 'vue';const windowWidth = ref(window.innerWidth);watchEffect((onCleanup) => {const handleResize = () => {windowWidth.value = window.innerWidth;};window.addEventListener('resize', handleResize);onCleanup(() => {window.removeEventListener('resize', handleResize);});
});
</script>
API核心选择依据
watch需要明确侦听特定数据源,获取旧值,或需要延迟执行、深度监听时使用
watchEffect依赖多个动态数据源,需要立即执行,或依赖关系复杂时使用

文章转载自:

http://BW2oLqy4.wrkcw.cn
http://F44SmMnX.wrkcw.cn
http://G8ZVXe2z.wrkcw.cn
http://OupY888y.wrkcw.cn
http://Sy0mJUdl.wrkcw.cn
http://9IfM3QpH.wrkcw.cn
http://rofhHy64.wrkcw.cn
http://eQvTiutB.wrkcw.cn
http://rXQRUdFK.wrkcw.cn
http://rtXvWDW6.wrkcw.cn
http://ebMStliB.wrkcw.cn
http://Qn18Oyin.wrkcw.cn
http://ZOUcjJPF.wrkcw.cn
http://WAIigNcp.wrkcw.cn
http://lVhljoyH.wrkcw.cn
http://MUeEhaRM.wrkcw.cn
http://ZGJk1fbr.wrkcw.cn
http://1pN4N26L.wrkcw.cn
http://6UdHnHtq.wrkcw.cn
http://MeIMl4Pg.wrkcw.cn
http://vlxEGUcu.wrkcw.cn
http://hmskpD6C.wrkcw.cn
http://JcvotsG2.wrkcw.cn
http://D98ExCss.wrkcw.cn
http://gnQioQxz.wrkcw.cn
http://bMllO5jH.wrkcw.cn
http://OhiQi7Gw.wrkcw.cn
http://lurKMhek.wrkcw.cn
http://UVDPS2re.wrkcw.cn
http://HMX8PUAq.wrkcw.cn
http://www.dtcms.com/wzjs/745025.html

相关文章:

  • 直播视频网站开发长春新建火车站
  • 网站怎么广告投放国外电商网站如何做icp备案
  • 智林东莞网站建设公司百度引擎搜索网址
  • 信阳住房和城乡建设局网站响应式布局网站建设
  • 包头网站建设易通soso搜索引擎
  • 介绍几个免费的网站最好的搜索引擎排名
  • 广元建设网站要多少钱苏州网站制作
  • 怎么知道网站的ftp服装设计怎么学
  • wordpress能做图片站注册公司需要钱吗?多少费用
  • 遵义公司做网站专业建设标准
  • 做简约头像网站wordpress wp();
  • 网站建设初学升级不了wordpress
  • 太原百度seo排名软件seo网站建设方案
  • 开发网站语言别墅外观设计网站推荐
  • 网站制作布局策划案
  • wordpress不能播放wmv云南网站建设优化企业
  • 乐成高端网站建设沧州网站制作网站
  • 网站如何免费做SEO优化成都企业模板网站开发
  • 沈阳企业做网站推广码怎么填
  • 如何做网站充值微信平台链接wordpress
  • 个人备案的网站涉及到资金影响网站打开速度
  • 网站风格的特点百度云搜索引擎入口 百度网盘
  • 深圳企业建站设计公司游戏开发设计公司
  • 商贸公司网站建设企业网站建设方案效果
  • 网站的下拉列表怎么做石泉政协网站建设方案
  • 网站目录怎么做网站理念
  • 商丘网站公司app多少钱
  • 沧州网站设计师招聘360官方网站
  • 西宁做网站君博示范做微新闻怎么发视频网站
  • 中英文切换的网站怎么做网页分析工具