zoukankan      html  css  js  c++  java
  • toRefs/toRef/unref/customRef

    toRefs(reactiveObj)

    解构reactive对象,返回对象中的属性都转为refs.保持数据响应式解构不丢失。

          const info4=reactive({name:'zs',age:10})
          // let {name,age}=info4 //直接解构失去了响应性 这是错误的写法 需要借助toRefs()
          let {name,age}=toRefs(info4) //会给我们返回两个ref对象 name age
          console.log(isRef(name),isRef(age)); //true true
          info4.name='zs~~~~~' //<==> name.value='zs~~~~~'完全等价,任何一个修改都会引起另外一个同步变化。很好

    toRef(reactiveObj,key)

    单个属性解构返回ref。可能会节约性能吧

    const info4=reactive({name:'zs',age:10}) 
     // toRef(reactiveObj,key)
     let name=toRef(info4,'name') // 单个解构返回ref name对象 name.vaue='sss'<==>info4.name='sss'完全等价 并且是响应式的
     let age=info4.age //这是是普通的age,age=20修改值,age确实会被修改,但是不是响应式的,页面age数据不会发生变化

    unref

    unref(value|ref(value)) 如果是ref对象就返回ref.value数据,反之返回value本身。大白话就是返回基本值 unref本质 val = isRef(val) ? val.value : val
        const useFoo=<T>(x:T|Ref<T>)=>{
          return unref(x) 
        }
        
        const r1=useFoo(ref('100')) //string
        const r3=useFoo(ref(100))
        

    customRef

    创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。它需要一个工厂函数,该函数接收 track 和 trigger 函数作为参数,并应返回一个带有 get 和 set 的对象。 

    自定义Ref 

    import { customRef } from "vue"
    
    
    const   useDefouncedRef=(value:string,delay=2000)=>{
      let timer:number|undefined=undefined
      return customRef((track,trigger)=>{
        return {
          get(){
            track() //收集依赖
            return value
          },
          set(newValue:string){
            clearTimeout(timer)
            timer=setTimeout(()=>{
              value=newValue
              trigger()
            },delay)
          }
        }
      })
    }
    export default useDefouncedRef
    
    // const message=useDefouncedRef('hello world') //通常式const message=ref('hello world)
    //   <input type="text" v-model="message">
  • 相关阅读:
    iframeUpload
    获取当前文件路径。
    ie6 overflow 失效
    ie8 vml不显示
    json转换
    nodejs for windows
    模块化管理组件(2012/05/09)
    模块化管理组件v0.1
    Firefox和IE之间7个JavaScript的差异
    c输入函数细节
  • 原文地址:https://www.cnblogs.com/xiaoliziaaa/p/14986109.html
Copyright © 2011-2022 走看看