首页 > 其他分享 >一文读懂ref函数:从入门到精通的具体操作指南

一文读懂ref函数:从入门到精通的具体操作指南

时间:2023-09-17 10:31:46浏览次数:42  
标签:函数 newVal shallow value 读懂 具体操作 ._ ref

一文读懂ref函数:从入门到精通的具体操作指南_数据

什么是ref函数

Vue3中的ref函数是一个用于创建响应式数据的函数。在Vue3中,当组件渲染时,会生成一个响应式数据对象,该对象包含了组件实例的所有数据属性。使用ref函数可以创建一个响应式的数据对象,并且可以在组件的生命周期内进行读取和修改。

具体来说,ref函数接受一个初始值作为参数,并返回一个包含该初始值的响应式对象。这个响应式对象可以被其他组件或函数引用,并且当它被修改时,相关的视图也会自动更新。


ref函数作用

定义一个响应式的数据

语法

const xxx = ref(initValue)

  • 创建一个包含响应式数据的引用对象(reference对象,简称ref对象)
  • JS中操作数据: xxx.value
  • 模板中读取数据: 不需要.value,直接:<div>{{xxx}}</div>


  • 接收的数据可以是:基本类型、也可以是对象类型。
  • 基本类型的数据:响应式依然是靠Object.defineProperty()getset完成的。
  • 对象类型的数据:内部 “ 求助 ” 了Vue3.0中的一个新函数—— reactive函数。

ref源码

function ref(value) {
    return createRef(value, false);
}

function createRef(rawValue, shallow) {
    if (isRef(rawValue)) {
        return rawValue;
    }
    return new RefImpl(rawValue, shallow);
}

class RefImpl {
    constructor(value, _shallow) {
        this._shallow = _shallow;
        this.dep = undefined;
        this.__v_isRef = true;
        this._rawValue = _shallow ? value : toRaw(value);
        this._value = _shallow ? value : convert(value);
    }
    get value() {
        trackRefValue(this);
        return this._value;
    }
    set value(newVal) {
        newVal = this._shallow ? newVal : toRaw(newVal);
        if (hasChanged(newVal, this._rawValue)) {
            this._rawValue = newVal;
            this._value = this._shallow ? newVal : convert(newVal);
            triggerRefValue(this, newVal);
        }
    }
}

举例

具体用法如下:

  1. 在组件的setup函数中,使用ref函数创建一个响应式数据对象。
<template>
  <h1>jf的信息</h1>
  <h2>姓名:{{ name }}</h2>
  <h2>年龄:{{ age }}</h2>
  <h2>职业: {{ job.type }}</h2>
  <h2>工资:{{ job.salary }}</h2>
  <button @click="sayInfo">显示信息</button>
  <button @click="changeInfo">修改信息</button>
</template>

<script>
import { ref } from "vue";
export default {
  name: "App",
  setup() {
    // 数据
    let name = ref("造梦者");
    let age = ref(18);
    let job = ref({
      type: "前端工程师",
      salary: "30K",
    });
    // 方法
    function sayInfo() {
      alert(`你好${name.value},你太厉害了吧,薪水${job.value.salary}这么高`);
    }
    function changeInfo() {
      name.value = "三十年后的造梦者";
      age.value = 48;
      job.value.type = "工程师";
      job.value.salary = "30w";
    }
    return {
      name,
      age,
      job,
      sayInfo,
      changeInfo,
    };
  },
};
</script>

标签:函数,newVal,shallow,value,读懂,具体操作,._,ref
From: https://blog.51cto.com/feng1992/7499969

相关文章

  • GitHub 上的开源项目贡献流程具体操作流程
    一般的GitHub上的贡献流程,包括创建fork、克隆、修改、提交、创建PullRequest的详细步骤:创建Fork:访问你要贡献的项目的GitHub页面,点击右上角的"Fork"按钮,这会在你的GitHub账户下创建该项目的副本。克隆项目:打开你的终端(命令行界面)并执行以下命令,将fork的项......
  • 不再困惑:一文读懂Vue2与Vue3的主要差异
    Vue3相对于Vue2有很多改进和新特性。以下是一些主要的区别:性能更好:Vue3的性能比Vue2更好,因为它使用了更少的代码和更高效的算法。例如,Vue3使用Proxy代替了Object.defineProperty来监听数据变化,这使得Vue3的性能更高。组合式API:Vue3引入了组合式API,这是一种新的编写组件逻辑的方式。......
  • React中createRef使用
    //★最为推荐的一种创建ref的方式:createRefclassClassicalRefextendsReact.Component{/***React.createRef调用后可以返回一个容器,这个容器可以存储被ref所标识的节点*该容器是专人专用的**/nodeRef01=React.createRef();nodeRef02......
  • 每日一题: 细说es6种的Reflect
    1、Reflect是什么,有什么作用?Reflect是ES6为了操作对象而新增的API,Reflect对象是一个全局的普通的对象,Reflect的原型就是Object.作用:将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上,那么以后我们就可以从Reflect对象上可以拿到语言内......
  • 无涯教程-JavaScript - ISREF函数
    描述如果指定的值是参考,则ISREF函数返回逻辑值TRUE。否则返回FALSE。语法ISREF(value)争论Argument描述Required/OptionalvalueAreferencetoacell.RequiredNotes您可以在执行任何操作之前使用此功能测试单元格的内容。适用性Excel2007,Excel2010,Excel......
  • Firefox火狐浏览器显示你的连接不安全,是什么意思?
    当Firefox连接到一个安全的网站时(网址最开始为“https://”),它必须确认该网站出具的证书有效且使用足够高的加密强度,以充分保护您的隐私。如果证书无法通过验证,或加密强度过低,Firefox会中止连接到这个网站,并向您显示SSL证书错误信息页面:“你的连接不安全”。什么情况下出现“你的......
  • Xstream操作xml_The type org.xmlpull.v1.XmlPullParser cannot be resolved. It is i
    //1.再使用xstream解析xml时发现总是报错Thetypeorg.xmlpull.v1.XmlPullParsercannotberesolved.Itisindirectlyreferencedfromrequired.classfiles//从bug中可以看出 XmlPullParser这个类为找打xstream需要依赖这个类从网上搜了一下这个类看看属于哪个jar包发现......
  • BUG库(Maven)Failed to execute goal org.apache.maven.plugins:maven-surefire-plugi
    一.Maven打包失败1.场景-项目中打包执行测试类报错 Failedtoexecutegoalorg.apache.maven.plugins:maven-surefire-plugin:2.12.4:test二.解决方案1.idea工具跳过选择按钮2.在pom文件中添加插件<plugin><groupId>org.apache.maven.plugins</groupId><artifactI......
  • 如何在EasyDSS视频直播点播平台中单独保存录像计划文件?具体操作方法是什么?
    EasyDSS视频直播点播平台是一个集成了视频直播、点播、转码、管理、录像、检索、时移回看等多种功能的综合性平台。它能够提供音视频采集、视频推拉流、H.265编码视频播放、存储、分发等一系列优秀的视频能力服务。根据用户反馈,在视频直播点播平台EasyDSS中设置的片段形式的录像计......
  • ubuntu22.04服务器的双网卡绑定的具体操作步骤和配置文件
    前言ubuntu22.04服务器的双网卡绑定具体步骤可以分成以下五步,下面按步骤操作一、安装必要软件sudoaptinstallnet-tools二、编辑/etc/netplan/01-network-manager-all.yaml将原内容修改为配置文件内容这种方式为自动获取IP的方式,系统将通过连接的DHCP服务器自动获取其IP地址,其......