vue3 ref,toRef,toRefs的区别

本文探讨了Vue中ref和toRef在响应式数据处理上的差异。ref创建的响应式数据不会影响源数据,但能更新视图;而toRef则会将对象属性变为响应式,修改会影响源数据但不更新视图。通过示例代码,展示了它们在实际应用中的用法,强调了如何在组件中正确管理和更新数据。
摘要由CSDN通过智能技术生成
ref 函数可以将对象里面的属性值变成响应式的数据,修改响应式数据,是不会影响到源数据,但是视图层上的数据会被更新

代码案例如下

<template>
<h>{{name1}}</h>
    <button @click="click">点击</button>
</template>

<script>
    import {reactive,toRefs,ref,toRef} from "vue"
    import test1 from "./Test1.vue"
    export default {
        name: "Test2",
        setup(){
            let name="yu";
            const name1=ref(name)

            const click=()=>{
                name1.value="zhang"
                console.log(name)
                console.log(name1)
            }


            return{
                name1,
                click
            }
        }


    }
</script>



toRef 函数会与源数据交互,修改响应式数据会造成源数据的修改,但是他的修改不会造成视图层数据的更新。

<template>
    <div style="text-align: center;padding-left: 50px">
        <h>{{name1}}</h>
        <br>
        <br>
        <button @click="click">点击</button>
    </div>

</template>

<script>
    import {reactive,toRefs,ref,toRef} from "vue"
    import test1 from "./Test1.vue"
    export default {
        name: "Test2",
        setup(){
            const name={
                name1:"hh"
            }
            const name1=toRef(name,"name1")

            const click=()=>{
                name1.value="zhang"
                console.log(name.name1)
                console.log(name1.value)
            }


            return{
                name1,
                click
            }
        }


    }
</script>

toRefs 函数与原始数据相交互,修改响应式数据会影响到源数据,但是不会更新视图层。
toRefs 函数还可以与其他响应式数据相交互,更加方便处理视图层数据。

<template>
    <div style="text-align: center;padding-left: 50px">
        <h>{{name1.name2}}</h>
        <br>
        <br>
        <button @click="click">点击</button>
    </div>

</template>

<script>
    import {reactive,toRefs,ref,toRef} from "vue"
    import test1 from "./Test1.vue"
    export default {
        name: "Test2",
        setup(){
            const name={
                name1:"hh",
                name2:"jj"
            }
            const name1=toRefs(name)

            const click=()=>{
                name1.name2.value="kk"
                console.log(name.name2)
                console.log(name1.name2.value)
            }


            return{
                name1,
                click
            }
        }


    }
</script>

 toRefs配合reactive可以实现修改响应数据会更新视图层

<template>
    <div style="text-align: center;padding-left: 50px">
        <h>{{name2}}</h>
        <br>
        <br>
        <button @click="click">点击</button>
    </div>

</template>

<script>
    import {reactive,toRefs,ref,toRef} from "vue"
    import test1 from "./Test1.vue"
    export default {
        name: "Test2",
        setup(){
            const name=reactive({
                name2:"hh"
            })

            const click=()=>{
                name.name2="k"
            }


            return{
               ...toRefs(name),
                click
            }
        }


    }
</script>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山河亦问安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值