前端vue3 watch

watch作用:监视数据的变化

当你监视的是 「基本类型值」(字符串 / 数字 / 布尔值,比如person2.name/ref(18).value)→ watch监视的是 **【值本身】**;

当你监视的是 「引用类型」(对象 / 数组 / Proxy/RefImpl,比如person2/ref({name:''}))→ watch监视的是 **【内存地址】**;

1、监视ref定义的基本数据类型:

let a=ref(0)

直接监视:

watch(a,(new,old)=>{

        //操作内容

})

监视的是基本类型,所以值变化了,new和old就不同

2、监视ref定义的对象类型:

 let person=ref({ name:"张三", age:18 }) function changeName(){ person.value.name+='~' } function changeAge(){ person.value.age+=1 } function changePerson(){ person.value={ //地址值会发生变化 name:"李四", age:20 } }

 使用方式:

watch(person,(newValue,oldValue)=>{

    console.log("person的值变化了",newValue,oldValue);

  })

此时,由于watch监视的是引用类型,看地址变化,因此调用changeName或changeAge改变单个属性时,地址不变化,不会触发监视,而调用changePerson时,person.value的地址会发生变化,因此会触发监视

解决方法:手动开启深度监视:

watch(person,(newValue,oldValue)=>{

    console.log("person的值变化了",newValue,oldValue);

  },{deep:true,immediate:true})//深度监视,立即监视(页面一刷新就先执行watch,而不是等person变化了再执行)

在这个watch的回调函数中,newValue和oldValue都是ref对象,需要.value才能获取到里面的值

 此时,如果只有单个属性发生变化,newValue和oldValue的值是一样的,因为地址值没有变化,但是如果是全部发生了变化,也就是如果触发了changePerson函数,newValue和oldValue的值就不一样了,因为地址值发生了变化。

3、监视reactive定义的对象类型:

 let person1=reactive({ name:"张三", age:18 }) function changeName1(){ person1.name+='~' } function changeAge1(){ person1.age+=1 } function changePerson1(){ Object.assign(person1, {//地址没有变化 name:"李四", age:20 }) }

开启监视:

 watch(person1,(newValue,oldValue)=>{

    console.log("person1的值变化了",newValue,oldValue);

  })

监视的是reactive定义的对象,默认开启深度监视,隐式创建深度监视,无法关闭,同上,由于地址没有发生变化(Object.assign不改变地址),所以newValue和oldValue的值是一样的

4、监视ref或reactive定义的对象类型中的某个属性:

 let person2=reactive({ name:"张三", age:18, job:{ a:10, b:20 } }) function changeName2(){ person2.name+='~' } function changeAge2(){ person2.age+=1 } function changeJob1(){ person2.job.a+=1 } function changeJob2(){ person2.job.b+=1 } function changeJob(){ person2.job={ //地址值会发生变化 a:100, b:200 } }

(1)如果该属性不是对象类型,而是比如name,需要写成函数形式,才能监视到变化,开启监视方式:

watch(()=>{return person2.name},(new,old)=>{

//内容

})

Vue 执行这个函数后,拿到的返回值是 person2.name → 也就是一个 字符串(基本数据类型),值为 '张三'watch 最终监视的,是这个函数的【返回值】,而不是函数本身,也不是 person2 这个对象。所以值变化了,new和old就会不同

(2)若该属性值是**依然**是【对象类型】,可直接编,也可写成函数,建议写成函数。

直接写:

watch(person2.job,(new,old)=>{})

此时,如果job中的单个属性发生变化,会触发监视,但由于地址不变,new和old是相同的。但是如果调用了:

  function changeJob(){

    person2.job={  //地址值会发生变化

      a:100,

      b:200

    }

  }

来改变job中的内容的话,person2.job的地址就发生变化,相当于此时的person2.job就不是原来的person2.job,就不会触发watch,甚至之后再单单改变a或者b,也不会再触发了(因为watch是挂载在原来的person2.job上的而不是这个person2.job上)

  写成函数形式,并开启深度监视后,无论是修改单个属性,还是全部属性,都会触发:

  watch(()=>{return person2.job},(newValue,oldValue)=>{

    console.log('person2的job变化了11',newValue,oldValue)

  },{deep:true})//深度监视

5、监视上述多个数据,组成数组

  //监视名字和单个车:

  watch([()=>{return person2.name},()=>{return person2.job.a}],(newValue,oldValue)=>{

    console.log('person2的name或job.a变化了',newValue,oldValue)

//value是数组[],new和oldvalue不同

  },{deep:true})




个人学习记录,如果错误,欢迎指正,也欢迎补充!

Read more

收藏!只为就业:纯LLM、多模态大模型、AIGC该选哪条路?

收藏!只为就业:纯LLM、多模态大模型、AIGC该选哪条路?

这绝对是2025年计算机应届生及算法方向求职者最焦虑的问题,没有之一。 过去几年,我从一线技术面试官做到团队负责人,面过的候选人从海外大厂博士到985硕士,累计不下八百人。聊得多了,也摸清了行业招聘的底层逻辑,今天就抛开虚言,从实战角度给大家盘清这三条赛道的利弊。 我不跟大家扯虚无的行业报告、千亿级市场规模这些空话——这些数据对普通人找工作毫无意义。核心只从「看简历、面候选人、拍板发offer」的一线视角,帮你判断哪条路更适合长期就业、薪资更高、更难被替代。 先定时间坐标:2026年1月。 大模型领域技术迭代太快,去年的最优解今年可能就成了内卷重灾区,这个时间点的行业现状,对求职决策至关重要。 先给结论,不绕弯子:优先all in多模态大模型 如果你的目标是拿下高质量算法岗,追求长期职业价值、低替代风险和高薪资天花板,别犹豫,直接深耕多模态领域。至于为什么这个方向是最优解,我把逻辑拆透,大家听完自己判断。 先看清三条赛道的真实现状 1. 纯语言大模型(LLM):基建化定型,算法岗内卷加剧 2025年的纯LLM领域,核心特征就四个字:基建化、工程化。现在想从零训练一个

从思考到实现:在 VS Code 中集成 MiniMax M2.1,解锁 AI 编程新范式

从思考到实现:在 VS Code 中集成 MiniMax M2.1,解锁 AI 编程新范式

在 AI 辅助编程(AI Coding)百家争鸣的今天,开发者们一直在寻找那个既能理解复杂逻辑、又能精准产出代码的“神队友”。最近,MiniMax M2.1 凭借其独特的 Interleaved Thinking(交错思考) 机制,在编程圈引起了广泛关注。 为什么选择 MiniMax 进行编程? 1. 逻辑严密的“交错思考”:不同于普通模型直接输出代码,M2.1 会先在 <think> 标签内进行深度推理,分析架构后再下笔,极大地减少了逻辑断层。 2. 超大上下文支持:在处理大型项目或重构复杂函数时,M2.1 能够精准捕捉全局上下文信息。 3. 极速中文理解:作为国产大模型的佼佼者,它在中文注释理解和响应速度上有着天然优势,拒绝“小作文”式的废话。 选购指南:主流

【AI】高效交互的艺术:AI提示工程与大模型对话指南

【AI】高效交互的艺术:AI提示工程与大模型对话指南

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人等方向学习者 ❄️个人专栏:《AI》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、ChatatGPT介绍 * 二、什么是提示工程? * 三、大语言模型的底层原理 * 四、AI的相关术语 * 五、如何与AI(以ChatatGPT为例)更好交流 * 5.1 使用AI的核心 * 5.2 提示组成结构 * 5.3 创建好的提示的策略 * 5.4 提示的类别 * 5.5 创建在和AI提示的进阶框架 * 5.6如何减少AI回答的空洞无味感 * 5.7 如何提高AI回答的可读性 * 六、使用AI的更多技巧 * 6.1 高效提示的原则 * 6.

Claude Code + cc-switch 配置指南

本指南旨在引导初次接触的用户,一步步完成 Claude Code 命令行工具 (CLI) 和 cc-switch 的安装与配置。完成配置后,用户即可在代码编辑器的终端中,通过简单的命令,调用 Kimi、GPT-4 或其他主流 AI 模型,辅助完成代码编写、解释和调试等任务。 核心结论:Claude Code 与 cc-switch 结合使用,可以显著提升编程工作的效率。 目录 * 1. 准备工作:配置必需的 Node.js 环境 * 2. 第一步:安装 Claude Code 命令行工具 * 3. 第二步:安装 cc-switch 模型管理工具 * 4. 第三步:获取 AI 模型的