• watch-compute-watchEffect


    watch-compute-watchEffect

    computed

    形式

    computed(ontrack,ontrigger)
    ontrackj会在某和响应式prop或者re f作为依赖被追踪时调用
    ontrigger:会在侦听回调被某个依赖的修改触发时调用
    
    const plusOne = computed(() => count.value + 1, {
      onTrack(e) {
        // 当 count.value 作为依赖被追踪时触发
        debugger
      },
      onTrigger(e) {
        // 当 count.value 被修改时触发
        debugger
      }
    })
    // 访问 plusOne,应该触发 onTrack
    console.log(plusOne.value)
    // 修改 count.value,应该触发 onTrigger
    count.value++
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    watchEffect

    他会立即执行传入的函数,同时响应式的追踪依赖,依赖改变的时候重新运行函数

    如果用到message 就只会监听message 就是用到几个监听几个 而且是非惰性 会默认调用一次

    let message = ref('')
    let message2 = ref('')
     watchEffect(() => {
        //console.log('message', message.value);
        console.log('message2', message2.value);
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    清除副作用

    就是在触发监听之前会调用一个函数可以处理你的逻辑例如防抖

    import { watchEffect, ref } from 'vue'
    let message = ref('')
    let message2 = ref('')
    
     watchEffect((oninvalidate) => {
        oninvalidate(()=>{
            //防抖代码....
        })
        console.log('message2', message2.value);
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    停止跟踪 watchEffect 返回一个函数 调用之后将停止更新

    const stop = watchEffect((oninvalidate) => {
        oninvalidate(()=>{
            //防抖代码....
        })
        console.log('message2', message2.value);
    }))
    stop() 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    额外的配置选项

    副作用刷新时机 flush 一般使用post

    presyncpost
    更新时机组件更新前执行强制效果始终同步触发组件更新后执行

    onTrigger 可以帮助我们调试 watchEffect

    const stop =  watchEffect((oninvalidate) => {
        //console.log('message', message.value);
        oninvalidate(()=>{
     
        })
        console.log('message2', message2.value);
    },{
        flush:"post", //dom
        onTrigger () {
     
        }
    })
    stop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    停止侦听:当watchEffect在组件的setup函数上运用或者在生命周期钩子上被调用,侦听器会被链接到该组件的生命周期,在组件卸载的时候自动停止。

    watch

    watch需要侦听具体的数据源,并在回调函数中执行副作用,默认情况下,他是惰性的,只有当数据源发生变化时才执行回调

    参数:(监听源,回调函数cb(newVal,oldVal),第三个参数一个options配置项是一个对象{深度监听deep,立刻调用一次immediate}

    watchEffect 比较,watch 允许我们:

    • 懒执行副作用;

    • 更具体地说明什么状态应该触发侦听器重新运行;

    • 访问侦听状态变化前后的值。

      
      
      
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24

      监听多个ref的也可以,watch的第一项用数组

      import { ref, watch ,reactive} from 'vue'
       
      let message = ref('')
      let message2 = ref('')
       
      watch([message,message2], (newVal, oldVal) => {
          console.log('新的值----', newVal);
          console.log('旧的值----', oldVal);
      })
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

    监听一个对象里面的单一项,watch的第一项为函数得到某一项

    import { ref, watch ,reactive} from 'vue'
     
    let message = reactive({
        name:"",
        name2:""
    })
     
    //watch的第一项可以改为函数 
    watch(()=>message.name, (newVal, oldVal) => {
        console.log('新的值----', newVal);
        console.log('旧的值----', oldVal);
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    typescript核心
    单元测试到底是什么?应该怎么做?
    HINet: Half Instance Normalization Network for Image Restoration
    Gopher进阶神器:拥抱刻意练习,从新手到大师。
    设计模式:备忘录模式(C++实现)
    企业微信hook接口协议,根据手机号搜索联系人
    在图片不被裁剪时opencv绕图片中任意点旋转任意角度
    HyperMesh网格划分简要流程小试
    服务器开发系列(三)——Linux与Windows操作系统基础功能对比
    【扩散模型】【文本到音频论文系列翻译二】使用指令微调LLM和潜在扩散模型的文本到音频生成
  • 原文地址:https://blog.csdn.net/Wu_whiteHyacinth/article/details/127556376