ref()

143_ref函数_处理对象类型 - 图1

教程内容

  • 作用: 定义一个响应式的数据
  • 语法: const xxx = ref(initValue)
    • 创建一个包含响应式数据的引用对象(reference对象,简称ref对象)
    • JS中操作数据: xxx.value
    • 模板中读取数据: 不需要.value,直接:<div>{{xxx}}</div>
  • 备注:
    • 接收的数据可以是:基本类型、也可以是对象类型。
    • 基本类型的数据:响应式依然是靠Object.defineProperty()getset完成的。
    • 对象类型的数据:内部 “ 求助 ” 了Vue3.0中的一个新函数—— reactive函数。

注意:

  1. 对于 obj={a:1} 这样的对象定义,可以修改其中的属性,例如: obj.a=2 ,但是不能直接 obj={b:2} 这样重新幅值一个新的对象。

源码

App.vue

<template>
    <h1>一个人的信息</h1>

    <!-- 模板中,不需要使用.value 取其属性值 -->
    <h2>姓名:{{name}}</h2>
    <h2>年龄:{{age}}</h2>

    <h3>工作种类:{{job.type}}</h3>
    <h3>工作薪水:{{job.salary}}</h3>

    <button @click="changeInfo">修改人的信息</button>
</template>

<script>
    //引入 ref()
    import {ref} from 'vue'

    export default {
        name: 'App',

        setup(){
            //此处定义,不是 响应式数据
            //let name = '张三'
            //let age = 18
            //如果想定义为响应式数据,需要借助 ref()函数 将其变为 可以被 Vue 监测到的 响应式数据。
            //数据
            let name = ref('张三')
            let age = ref(18)

            //Vue3 中 ref() 对 对象类型,使用 Proxy()(∈js ES6自带) 加工。
            let job = ref({
                type:'前端工程师',
                salary:'30K'
            })

            //方法
            function changeInfo(){

                //通过此处可以看到上面通过 ref() 加工后的 name 是一个对象。
                //    RefImpl = Reference(引用) Implement(实现)
                //    记住: 通过 ref() 加工后的对象叫: 引用实现的实例对象(简称:引用对象)!
                console.log(name)

                //Vue3 操作属性,需要使用 .value 。因为此时的 name 是一个引用对象。
                name.value = '李四'
                // age.value = 48

                console.log(job.value)

                //记住:    从对象中取东西,需要.value,如果后面还要取东西,就不需要.value了。        
                // job.value.type = 'UI设计师'
                // job.value.salary = '60K'
                // console.log(name,age)
            }

            //返回一个对象(常用)
            return {
                name,
                age,
                job,
                changeInfo
            }
        }
    }
</script>