zoukankan      html  css  js  c++  java
  • computed/watch/watchEffect

    computed

    computed去计算基本数据类型

     // computed去计算基本数据类型
        const count=ref(1)
        // computed ()里面是不带任何参数的。写成函数形式要有返回值,不然默认是undefined。箭头函数一行默认就是有返回值
        const plusOne=computed(()=>{
          return count.value++
        })
        // computed第二种用法set/set
        const count1=ref(10)
        const plusOne1=computed({
          get:()=>count1.value++,
          set:value=>count1.value=value-5  //set去改变get依赖的值
          // set:()=>{} get/set成对出现 如果set是在不知道写啥 就这set:()=>{}
        })

    watch:watch(要监听的数据,回调函数,配置项对象【非必须】)

    watch监视基本数据类型值

     const count2=ref(1) //监听基本类型值 watch(要监听的数据,回调函数,配置项对象)
        watch(count2,
        (newVal,oldVal)=>{
          console.log(newVal,oldVal); //初始化的时候惰性执行immediate=false默认值(也就是不执行这个回调函数)
        },
        {
          immediate:true, //是否立即监听
          deep:true,//基本数据类型 depp:true/false无所谓了吧
        })

    watch监视对象数据类型

    const state=reactive({count:30,wife:{name:'xiaoling',age:10}})
        // 直接去监视整个对象,里面每个属性值发生改变了,函数都会执行
        watch(state,(newVal,oldVal)=>{ 
          console.log(newVal,oldVal,0); //居然是同一个对象
        },{deep:true,immediate:false}) //deep:true/false影响不大了。默认就是深度监听在深的对象值发生改变也能监听的到
        setTimeout(()=>{
          state.wife.age=state.wife.age +3
        },2000)
    
        
    const state1=reactive({count1:300,wife:{name:'xiaozhang'}}) // 监听对象的特定属性值,只有当对象的这个特定属性值发生改变,函数才会去执行,这个比较好 watch(()=>state1.wife.name,(newVal,oldVal)=>{ //基本值是两个值。深度对象也能监视的到 console.log(newVal,oldVal); },{}) setTimeout(()=>{ state1.wife.name=state1.wife.name+'~~~~~' },2000)

    watchEffect

    在响应式地跟踪其依赖项时立即运行一个函数,并在更改依赖项时重新运行它。

         const age=ref(10)
         let state=reactive({name:'zs',age:10})
         const changeAge=()=>{
           age.value++
         }
         const changeState=()=>{
           state.name=Math.random()+''
         }
         
          // 自动监视ref值
          watchEffect(()=>{
            console.log('ref-age',age.value); //初始化时候就会自动执行一次。age.value每次发生改变 watchEffect函数都会立即执行。
            
          })
    
         //在响应式地跟踪其依赖项时立即运行一个函数,并在更改依赖项时重新运行它
         watchEffect(()=>{
           console.log('reactive-state',state); //wo改变state里面属性值如state.name变化 而直接监听state, 只会在初始化时候执行一次。而后不会再执行
         })
         watchEffect(()=>{
           console.log('reactive-state.name',state.name); //初始化时候执行一次 并且当我改变了state.name值(上一次和下一次的值不一样)这个函数就会反复执行
           
         })

    停止监听返回stop函数

    watchEffect清除副作用

    这个有点难

    watchEffect改变立即执行时机。传入配置项{flush:pre/post/sync}

  • 相关阅读:
    POJ 1466 最大独立点集
    POJ 3159 差分约束
    POJ 3411 DFS
    POJ 2665 模拟,,
    POJ 3134 Power Calculus ID-DFS +剪枝
    POJ 1543 暴搜
    455. Assign Cookies
    715. Range Module
    530. Minimum Absolute Difference in BST
    493. Reverse Pairs(BST, BIT, MergeSort)
  • 原文地址:https://www.cnblogs.com/xiaoliziaaa/p/14980623.html
Copyright © 2011-2022 走看看