• vue3中的isRef toRef toRefs readonly


    目录

    isRef  

    toRef

     toRefs

     readonly


    isRef  

    isRef 判断是否为响应性变量 

    用法:isRef("变量"),

    1. <script setup>
    2. import { reactive,ref,isRef} from 'vue'; //需要引入isRef
    3. let obj=reactive({name:"小狮子",age:18})
    4. let msg1=ref("pink") //非响应式
    5. let msg2="blue" //响应式
    6. function fn(){
    7. console.log("msg1是否为响应式:",isRef(msg1))
    8. console.log("msg2是否为响应式:",isRef(msg2))
    9. console.log("obj.name是否为响应式:",isRef(obj.name))
    10. }
    11. script>
    12. <style scoped>
    13. style>

    点击按钮控制台打印

    从obj.name不是响应式数据看出引用数据的属性值不是响应式的。

    toRef

    toRef 把引用数据的属性值设置为变量 并且关联和设置为响应性变量

    用法:let x=toRef(obj,"x") // 隐式 let x=ref(obj.x);并且响应到obj对象去,在script里边取值时要用 .value

    1. <script setup>
    2. import { reactive,ref,isRef,toRef} from 'vue';
    3. let obj=reactive({name:"小狮子",age:18})
    4. let msg1=ref("pink")
    5. let msg2="blue"
    6. let name=toRef(obj,"name")// 隐式 let name=ref(obj.name);并且响应到obj对象去
    7. function fn(){
    8. console.log("msg1是否为响应式:",isRef(msg1))
    9. console.log("msg2是否为响应式:",isRef(msg2))
    10. console.log("obj.name是否为响应式:",isRef(obj.name))
    11. console.log(name.value,isRef(name))
    12. name.value="小羊" //在script里边取值时要用 .value
    13. console.log(name.value,isRef(name))
    14. }
    15. script>
    16. <style scoped>
    17. style>

    点击按钮之后界面和控制台:

    控制台打印为true说明为obj.name成功变为响应式数据,再由界面的小狮子变为小羊说明该响应式数据成功响应到了obj对象里去

     toRefs

    toRefs 引用数据响应式解构

    用法:如,let obj2=reactive({a:10,b:20})
    let {a,b}=toRefs(obj2)//a,b变量具备响应功能、在script里边取值时要用 .value

     普通的结构是不能具备 响应式数据的如:

    1. <script setup>
    2. import { reactive,ref,isRef,toRef,toRefs} from 'vue';
    3. let obj=reactive({name:"小狮子",age:18})
    4. let {name,age}=obj
    5. // let {name.age}=toRefs(obj)
    6. function fn(){
    7. console.log(name,age)
    8. name="小羊"
    9. age=20
    10. console.log(name,age)
    11. }
    12. script>
    13. <style scoped>
    14. style>

    点击按钮后界面和控制台:

     

    发现数据刷新界面却没有刷新,说明普通解构是不具有响应式数据的。

    我们稍作改变如:

    1. <script setup>
    2. import { reactive,ref,isRef,toRef,toRefs} from 'vue';
    3. let obj=reactive({name:"小狮子",age:18})
    4. let {name,age}=toRefs(obj) //toRefs解构
    5. function fn(){
    6. console.log(name.value,age.value)
    7. name.value="小羊" //取值要用.value
    8. age.value=20
    9. console.log(name.value,age.value)
    10. }
    11. script>
    12. <style scoped>
    13. style>

     此时再点击按钮得到的变化为:

    由此可以看出数据改变界面也跟着改变,所以  toRefs解构是响应式数据

     readonly

    readonly 把数据变为只读功能

     用法:如:let obj=readonly ({ })

    1. <script setup>
    2. import { reactive,ref,isRef,toRef,toRefs,readonly} from 'vue'; //必须引入readonly
    3. let obj=reactive({name:"小狮子",age:18})
    4. let obj1=readonly(obj) //设置为只读
    5. function fn(){
    6. console.log(obj1.name,obj1.age,1111)
    7. obj1.name="小羊"
    8. obj1.age=20
    9. console.log(obj1.name,obj1.age,2222)
    10. }
    11. script>
    12. <style scoped>
    13. style>

     点击按钮之后界面和控制台:

     

     

     由此看出数据没有被改变,且界面也没有刷新。

  • 相关阅读:
    131.Avro格式数据与在spark中应用
    万字摸透Redis、MySQL和ZooKeeper分布式锁,还不会的出来!
    设计模式与应用:访问者模式
    QT动态加载qss和rcc方式
    一文弄懂numpy数组
    MSVC 和 Visual Studio 代码诊断的未来
    两台windows主机共享文件的方法【简单有效】
    kcp简析
    Redis
    如何通过编码器信号计算输送线/输送带线速度(飞剪、追剪算法基础)
  • 原文地址:https://blog.csdn.net/m0_63470734/article/details/126978593