Vue Ref全家桶具体用法详解

yizhihongxing

Vue Ref全家桶具体用法详解

在 Vue 中,我们经常需要访问到组件中的元素,例如获取 input 标签的值、获取 canvas 画布、操作 DOM 等,这时候 Ref 就是一个很友好的工具。Vue 3.0 进一步细化了 Ref 的分类,分别是 Ref、Reactive Ref、Shallow Ref、To Ref 四种类型,可以更加精细地控制数据是否为响应式以及其他的操作。

Ref

Ref 就是最普通的一个 Ref 类型,可以使用 ref 函数来创建。Ref 可以用于保存任何的数据类型,并且可以在组件中通过 $refs 属性来访问。

下面是一个例子,首先在组件中定义一个 Ref:

<template>
  <div>
    <p ref="myParagraph">Hello World</p>
  </div>
</template>

然后在 JavaScript 中,我们可以通过如下方式引用 Ref:

this.$refs.myParagraph

使用 Ref 的主要好处是可以访问到具体的 DOM 元素,这样可以进行元素的操作,例如获取 input 标签的值、操作 canvas 画布等。

ReactiveRef

Reactive Ref 是 Vue 3.0 新增的一个 Ref 类型,可以用于创建响应式的 Ref。使用 reactive 函数可以创建一个响应式对象,使用 ref 函数可以同时将其转化为 Ref,得到的就是 Reactive Ref。Reactive Ref 和 Ref 的用法是相同的,唯一的区别在于 Reactive Ref 的值是响应式的。

下面是一个例子,在组件中定义一个 Reactive Ref:

<template>
  <div>
    <p>{{ myText }}</p>
    <button @click="changeText">Change Text</button>
  </div>
</template>

<script>
import { reactive, ref } from 'vue';

export default {
  setup() {
    const data = reactive({
      text: 'Hello World',
    });

    const myText = ref(data.text);

    const changeText = () => {
      data.text = 'New Text';
    };

    return {
      myText,
      changeText,
    };
  },
};
</script>

可以看到,这里使用了 ref 函数将 data.text 转化为 Reactive Ref,这样 myText 将是一个响应式的 Ref,而 data.text 的变化也会影响 myText 的值。

ShallowRef

Shallow Ref 是另外一种 Ref 类型,可以用于创建一个浅层响应式的 Ref。这意味着,这个 Ref 只会追踪对象的第一层属性的变化,而深层嵌套的属性的变化将无法触发更新。Shallow Ref 可以使用 shallowRef 函数来创建。

下面是一个例子,在组件中定义一个 Shallow Ref:

<template>
  <div>
    <p>{{ myData }}</p>
    <button @click="changeData">Change Data</button>
  </div>
</template>

<script>
import { shallowRef } from 'vue';

export default {
  setup() {
    const data = { text: 'Hello World' };
    const myData = shallowRef(data);

    const changeData = () => {
      data.text = 'New Text';
    };

    return {
      myData,
      changeData,
    };
  },
};
</script>

可以看到,这里使用了 shallowRef 函数将 data 转化为 Shallow Ref,这样 myData 将是一个浅层响应式的 Ref,而 data.text 的变化将无法影响 myData 的值,因为 text 属性并不是 myData 的第一层属性。

ToRef

To Ref 可以用于将对象的某个属性转化为 Ref。To Ref 可以使用 toRef 函数来创建。

下面是一个例子,在组件中定义一个 To Ref:

<template>
  <div>
    <p>{{ myText }}</p>
    <button @click="changeText">Change Text</button>
  </div>
</template>

<script>
import { reactive, toRef } from 'vue';

export default {
  setup() {
    const data = reactive({
      text: 'Hello World',
    });

    const myText = toRef(data, 'text');

    const changeText = () => {
      data.text = 'New Text';
    };

    return {
      myText,
      changeText,
    };
  },
};
</script>

可以看到,这里使用了 toRef 函数将 data.text 转化为 To Ref,这样 myText 将是一个 Ref,可以直接访问到 data.text 的值,而 data.text 的变化也会影响 myText 的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue Ref全家桶具体用法详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 一文带你搞懂Vue3的基本语法

    一文带你搞懂Vue3的基本语法 Vue.js是一款流行的前端JavaScript框架,Vue.js 3是Vue.js框架的最新版本,其基本语法与Vue.js 2有许多不同之处。 创建Vue应用程序 要创建一个Vue应用程序,您需要创建一个Vue实例。您可以使用Vue.createApp()方法来创建Vue实例。以下是一个基本的Vue应用程序示例: <d…

    Vue 2023年5月27日
    00
  • vue踩坑记录:属性报undefined错误问题

    当你使用Vue.js构建自己的应用时,可能会遇到属性报undefined错误问题,这种问题会造成很大的困扰。下面让我们详细讲解一下怎么解决这个问题。 问题原因 首先我们需要明确这个错误的原因,常见的错误原因有以下几种: 将变量名写错了。 Vue组件的作用域问题。 Vue组件内部的变量和外部的变量命名冲突问题。 快速解决 如果您遇到属性报undefined错误…

    Vue 2023年5月27日
    00
  • vue2.0 自定义组件的方法(vue组件的封装)

    下面我将详细讲解“vue2.0 自定义组件的方法(vue组件的封装)”的完整攻略。 1. vue组件的封装 Vue是一个组件化开发的框架,在实际开发中,我们常常需要将一些通用的功能封装成组件,以方便复用。Vue中封装组件的方法主要有两种: 全局组件:在Vue的实例中注册一个全局组件,可以在全局范围内使用; 局部组件:在Vue组件中定义局部组件,只能在该组件内…

    Vue 2023年5月27日
    00
  • vue3.x中emits的基本用法实例

    下面是详细讲解Vue3.x中emits的基本用法实例的攻略,包含两个示例说明。 Vue3.x中emits的基本用法实例 什么是emits? emits是Vue3新引入的一个选项,它用于为自定义组件声明触发的自定义事件。在Vue3中,$emit方法被移到了组件实例的emits属性中,因此emits属性的主要作用就是声明自定义事件,为自定义组件提供了非常好的解耦…

    Vue 2023年5月28日
    00
  • 关于vue-cli 3配置打包优化要点(推荐)

    我来详细讲解一下关于Vue-CLI 3的打包优化要点。 1. 配置文件 Vue-CLI 3的配置文件是通过vue.config.js文件进行配置的。我们可以在这里设置打包的基本配置、压缩代码、CDN等。 2. 代码分割 代码分割是优化打包体积的一个非常重要的方式。一般来说,我们可以通过以下方式进行代码分割: 异步组件:在路由懒加载、组件懒加载的时候使用imp…

    Vue 2023年5月29日
    00
  • Vue-CLI多页分目录打包的步骤记录

    下面就来详细讲解一下“Vue-CLI多页分目录打包的步骤记录”的完整攻略。 Vue-CLI多页分目录打包的背景 在Vue的开发中,通常会使用到Vue-CLI脚手架工具来快速创建一个Vue项目,但默认情况下Vue-CLI创建的是单页应用,而有些场景需要创建多页应用。多页应用指的是一个网站包含多个入口页面,并且每个入口页面处理不同的业务逻辑,这种情况下需要使用多…

    Vue 2023年5月28日
    00
  • vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作

    下面就给您详细讲解一下“Vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作”的完整攻略。 什么是Vue双击事件2.0事件监听 Vue双击事件是指在Vue框架中注册的鼠标单击事件,在间隔一定时间后再次点击鼠标,使其触发双击事件的一种事件处理方式。在Vue 2.0版本中,双击事件具有更高的可定制性和可扩展性。 点击事件 在Vue中,可以通过 v…

    Vue 2023年5月29日
    00
  • 基于vue2.0+vuex的日期选择组件功能实现

    下面是关于“基于vue2.0+vuex的日期选择组件功能实现” 的完整攻略。 1. 确定需求 在开发一个基于 vue2.0+vuex 的日期选择组件之前,首先需要确定几个核心需求: 可以显示当前选择的日期 可以手动选择日期 可以通过快捷按钮选择日期(比如“今天”、“明天”、“本周”等) 可以显示所选日期所对应的具体内容(比如日程安排等) 可以支持选择日期范围…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部