#小知识点 Vue2和3中mount的区别

文章目录

    • 一、挂载方式
      • Vue 2 的挂载方式
      • Vue 3 的挂载方式
      • 主要变化
    • 二、说明
      • Vue 2 中的 `new Vue()` 实例
      • Vue 3 中的 `createApp` 应用实例
      • 应用实例 vs. 组件实例
      • 为什么这样设计?
    • 三、Vue实例和应用实例分别是什么
      • 1. **Vue 实例**(Vue Instance)
        • 在 Vue 2 中:
        • 特点:
      • 2. **应用实例**(App Instance)
        • 在 Vue 3 中:
        • 特点:
      • **Vue 实例**和**应用实例**的区别
      • 总结
    • 四、挂载方式
      • 挂载方式的具体含义:
      • 为什么需要挂载?
      • 挂载与生命周期
      • 总结

一、挂载方式

在 Vue 3 中,相比 Vue 2,$mount 方法的使用发生了变化。这是因为 Vue 3 引入了一个新的应用实例 API,并改进了挂载方式。

Vue 2 的挂载方式

在 Vue 2 中,通常你会使用 new Vue() 来创建一个 Vue 实例,并通过 $mount 方法将它挂载到一个 DOM 元素上。例如:

new Vue({render: h => h(App)
}).$mount('#app')

这里的 $mount 是 Vue 2 中的一个方法,用来将 Vue 实例挂载到 DOM 上指定的元素。

Vue 3 的挂载方式

在 Vue 3 中,使用 createApp() 创建一个应用实例,然后直接调用 mount() 方法来挂载应用到 DOM 元素。没有 $mount 了,直接在 createApp(App) 后调用 .mount('#app')

import { createApp } from 'vue'
import App from './App.vue'createApp(App).mount('#app')

主要变化

  1. createApp API:在 Vue 3 中,createApp 是新的创建应用实例的方式,返回的是一个应用实例对象,不再是 Vue 实例。它比 Vue 2 中的 new Vue() 更简洁和灵活。
  2. mount 方法:在 Vue 3 中,应用实例直接通过 mount() 来挂载,而不再使用 Vue 2 中的 $mount
  3. 响应式系统和生命周期的变化:Vue 3 对内部的响应式系统和生命周期钩子做了改进,新的 API 设计上也更加注重功能的组合性和灵活性。

总结起来,Vue 3 将 $mount 方法移除了,转而使用 createApp().mount() 的方式来挂载应用。

二、说明

在 Vue 3 中,createApp 返回的不是 Vue 实例,而是 应用实例(App instance)。这个应用实例对象用于管理整个 Vue 应用的生命周期、配置、全局资源等。它与 Vue 2 中的 Vue 实例有所不同,Vue 2 中的 new Vue() 返回的是一个 Vue 实例,而 Vue 3 中的 createApp() 返回的是一个应用实例,这个实例是应用的“容器”,可以用来配置和挂载 Vue 应用。

Vue 2 中的 new Vue() 实例

在 Vue 2 中,new Vue() 创建的是一个 Vue 实例,这个实例是 Vue 的核心对象,负责管理数据、事件、组件、生命周期等:

new Vue({el: '#app',render: h => h(App)
})

这个 Vue 实例包含了应用的所有功能,像是响应式数据、生命周期钩子、事件等。

Vue 3 中的 createApp 应用实例

而在 Vue 3 中,createApp 返回的是一个应用实例。这个实例的主要作用是初始化和管理 Vue 应用,而不再直接管理组件实例。它是 Vue 应用的起点,负责以下几项任务:

  • 挂载应用:通过 mount() 方法将应用挂载到 DOM 元素。
  • 注册组件、指令、插件:你可以在应用实例上全局注册组件、指令、插件等。
  • 配置和管理全局状态:可以在应用实例上设置一些全局配置,比如全局的错误处理、事件总线等。
import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)// 在这里你可以注册全局组件、插件等
// app.component('MyComponent', MyComponent)app.mount('#app')

应用实例 vs. 组件实例

在 Vue 3 中,createApp 创建的是 应用实例,而每个 Vue 组件本身仍然是一个组件实例。应用实例和组件实例的区别在于:

  • 应用实例:是整个 Vue 应用的入口,负责管理和配置全局状态,处理生命周期的开始和结束。
  • 组件实例:是由 Vue 创建并挂载的每一个单独的组件,负责管理该组件的状态、模板、生命周期等。

应用实例可以理解为容器,而组件实例是容器中的具体元素。

为什么这样设计?

Vue 3 采用这种设计,目的是使得 Vue 应用的结构更加清晰和灵活。通过分离应用实例和组件实例,Vue 3 可以更好地支持多实例和更复杂的应用场景。例如,createApp 使得同一个页面可以创建多个独立的 Vue 应用,而不需要担心它们之间的干扰。而 Vue 2 中的 new Vue() 是一个全局单例,通常只能创建一个 Vue 实例。

总结起来,createApp 返回的是应用实例,而不是 Vue 实例。它是一个应用的管理者,而组件实例仍然是由 Vue 在需要时创建和管理的。

三、Vue实例和应用实例分别是什么

在 Vue 中,Vue 实例应用实例是两个不同的概念,它们分别指代了不同的对象和角色,尤其是在 Vue 2 和 Vue 3 中有一些不同的设计和使用方式。

1. Vue 实例(Vue Instance)

Vue 实例通常指的是使用 new Vue() 创建的对象,在 Vue 2 中,这是整个 Vue 应用的核心对象。它代表了一个 Vue 应用的单个实例,负责处理数据、组件、生命周期、事件、渲染等方面的内容。每个 Vue 实例通常是与一个 DOM 元素绑定的,它可以包含组件、模板、计算属性、事件监听器等。

在 Vue 2 中:

Vue 实例是应用的核心。通过 new Vue() 创建一个新的 Vue 实例,它包含了所有的响应式数据、生命周期钩子和方法等。

new Vue({el: '#app',           // 挂载到 DOM 元素data: {message: 'Hello Vue!'},methods: {greet() {console.log(this.message);}},render: h => h(App)    // 渲染根组件
})
特点:
  • 数据绑定:Vue 实例的 data 属性定义了应用的响应式数据。
  • 生命周期钩子:Vue 实例可以定义一系列生命周期钩子(如 mounted, created 等)来控制实例的行为。
  • 事件和方法:通过实例可以调用事件和方法,管理视图和逻辑。
  • 单实例:通常,Vue 2 的应用是单实例的,意味着 new Vue() 创建的实例是应用的唯一实例。

2. 应用实例(App Instance)

在 Vue 3 中,createApp() 函数返回的是一个 应用实例,它代表了整个 Vue 应用的容器。应用实例不仅负责挂载应用,还负责配置和管理全局资源、插件、指令等。

应用实例不再直接管理每个组件的响应式数据,而是作为一个应用的入口点,负责整个 Vue 应用的生命周期和配置。通过应用实例,可以注册全局组件、插件、指令等。

在 Vue 3 中:
import { createApp } from 'vue'
import App from './App.vue'// 创建应用实例
const app = createApp(App)// 可以在应用实例上配置全局组件、插件、指令等
app.component('MyComponent', MyComponent)// 挂载到 DOM 元素
app.mount('#app')
特点:
  • 全局配置:应用实例用于配置全局资源,如注册全局组件、插件等。
  • 生命周期管理:应用实例负责整个 Vue 应用的生命周期。
  • 可以创建多个应用实例:在 Vue 3 中,可以通过多次调用 createApp() 来创建多个独立的 Vue 应用实例,而 Vue 2 中通常只有一个 new Vue() 实例。
  • 更灵活:应用实例的设计使得 Vue 3 更加灵活,能够支持更多的场景,比如在同一个页面上管理多个独立的 Vue 应用。

Vue 实例应用实例的区别

特性Vue 2 中的 Vue 实例Vue 3 中的 应用实例
创建方式new Vue()createApp()
主要职责管理单个 Vue 应用的生命周期、数据、视图等管理整个 Vue 应用的生命周期和全局资源
绑定到 DOM 元素通过 el 属性通过 mount() 方法
是否可以创建多个实例通常只有一个实例,应用为单实例可以通过 createApp() 创建多个独立实例
管理数据和视图管理响应式数据、视图、组件等主要用于配置和管理全局状态,挂载组件等
生命周期钩子created, mounted在应用实例级别提供生命周期钩子

总结

  • Vue 实例(在 Vue 2 中)是应用的核心,它代表了一个具体的 Vue 应用对象,负责管理数据、事件、生命周期等。你只能有一个 Vue 实例,通常是通过 new Vue() 创建。

  • 应用实例(在 Vue 3 中)是通过 createApp() 创建的,它代表了 Vue 应用的容器。应用实例的职责是挂载和管理整个 Vue 应用的生命周期和全局资源,而具体的组件实例由 Vue 应用实例来管理。Vue 3 中的 createApp() 让你能够创建多个应用实例,这使得 Vue 更加灵活。

这种设计改变了 Vue 3 的架构,使得 Vue 3 更加模块化、灵活,支持多实例应用,并且能更好地与插件和库集成。

四、挂载方式

挂载方式(Mounting)是指将 Vue 应用(或组件)绑定到实际的 DOM 元素上的过程,使得 Vue 能够控制该 DOM 元素并渲染视图。简单来说,挂载就是将 Vue 应用或组件“插入”到网页的某个 DOM 元素中,开始管理这个元素的视图更新和交互逻辑。

在 Vue 中,挂载过程是应用初始化的关键步骤。当你创建一个 Vue 实例(或应用实例)时,需要指定一个 DOM 元素,Vue 会将该实例与 DOM 元素关联,之后 Vue 会通过其响应式系统来管理该 DOM 元素的内容和状态。

挂载方式的具体含义:

  1. Vue 实例挂载(Vue 2 中)
    在 Vue 2 中,使用 new Vue() 创建 Vue 实例时,你可以通过 el 属性指定要将 Vue 实例挂载到的 DOM 元素。这时,Vue 会将实例的模板渲染到指定的 DOM 元素中。挂载过程通常是自动的,当你使用 new Vue() 创建实例时,它就会立即挂载到页面上的 DOM 元素。

    示例:

    new Vue({el: '#app',  // 挂载到 id 为 "app" 的 DOM 元素data: {message: 'Hello Vue!'},render: h => h(App)
    })
    

    这里的 el: '#app' 就是指定 Vue 实例挂载到 id="app" 的 DOM 元素上,Vue 会在这个元素中渲染组件。

  2. Vue 应用实例挂载(Vue 3 中)
    在 Vue 3 中,createApp() 创建的应用实例通过 mount() 方法来挂载到指定的 DOM 元素上。在 Vue 3 中,mount() 是应用实例的一个方法,用来将整个 Vue 应用与 DOM 元素绑定。

    示例:

    import { createApp } from 'vue'
    import App from './App.vue'const app = createApp(App)
    app.mount('#app')  // 挂载到 id 为 "app" 的 DOM 元素
    

    这里的 mount('#app') 就是指定应用实例将 Vue 应用挂载到 id="app" 的 DOM 元素上。通过这种方式,Vue 会在该元素中渲染出根组件(如 App.vue)。

为什么需要挂载?

挂载的过程本质上是将 Vue 的模板(HTML)与 DOM 元素联系起来,让 Vue 能够根据应用的状态来更新和渲染 DOM。在挂载后的生命周期中,Vue 会持续观察和响应数据的变化,并根据数据变化自动更新对应的 DOM 元素。

  • 响应式更新:当 Vue 的响应式数据发生变化时,Vue 会自动更新绑定的 DOM 元素内容。
  • DOM 渲染:在挂载后,Vue 会根据组件的模板渲染出 HTML 内容,插入到指定的 DOM 元素中。

挂载与生命周期

挂载过程是 Vue 应用生命周期的一部分,通常是在创建实例时执行。挂载后的 Vue 实例会有不同的生命周期钩子,如 mountedcreated 等,用来处理应用的初始化、渲染等过程。

例如,在 Vue 3 中,你可以使用 mounted() 钩子来执行挂载完成后的操作:

const app = createApp(App)app.mount('#app')app.config.globalProperties.$mountedMessage = 'App Mounted!' // 在挂载后执行某些操作

总结

挂载方式指的是如何将 Vue 应用或组件与某个 DOM 元素绑定,使得 Vue 能够管理该元素并渲染组件内容。Vue 2 使用 el 属性进行挂载,而 Vue 3 使用 mount() 方法进行挂载。通过挂载,Vue 能够把应用的视图和逻辑与 DOM 进行关联,并使得 Vue 在数据变化时自动更新视图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19874.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Redis的特性ubuntu进行安装

文章目录 1.六大特性1.1内存存储数据1.2可编程1.3可扩展1.4持久化1.5集群1.6高可用1.7速度快 2.具体应用场景(了解)3.Ubuntu安装Redis3.1安装指令3.2查看状态3.3查找配置文件3.4修改文件内容3.5重启服务器生效3.6安装客户端并进行检查 4.Redis客户端介绍…

本地音乐服务器(三)

6. 删除音乐模块设计 6.1 删除单个音乐 1. 请求响应设计 2. 开始实现 首先在musicmapper新增操作 Music findMusicById(int id);int deleteMusicById(int musicId); 其次新增相对应的.xml代码&#xff1a; <select id"findMusicById" resultType"com.exa…

leetcode【滑动窗口】相关题目分析讲解:leetcode209,leetcode904

经典滑动窗口(leetcode209) 题干 题目难度&#xff1a;简单 题目分析 要求找到符合大于等于target的长度最小的子数组的常规思路便是暴力破解——遍历数组&#xff0c;通过两层遍历&#xff0c;找到最小的子数组并返回。 但显而易见&#xff0c;这样时间复杂度会是O(n2)级…

ArkTS组件结构和状态管理

1. 认识基本的组件结构 ArkTS通过装饰器Component 和Entry 装饰 struct 关键字声明的数据结构&#xff0c;构成一个自定义组件 自定义组件中提供了一个build函数&#xff0c;开发者需要在函数内以链式调用的方式进行基本的UI描述&#xff0c;UI描述的方法请参考UI描述规范srtuc…

语义分割(semantic segmentation)

语义分割(semantic segmentation) 文章目录 语义分割(semantic segmentation)图像分割和实例分割代码实现 语义分割指将图片中的每个像素分类到对应的类别&#xff0c;语义区域的标注和预测是 像素级的&#xff0c;语义分割标注的像素级的边界框显然更加精细。应用&#xff1a…

【STM32】在 STM32 USB 设备库添加新的设备类

说实话&#xff0c;我非常想吐槽 STM32 的 USB device library&#xff0c;总感觉很混乱。 USB Device library architecture 根据架构图&#xff1a; Adding a custom class 如果你想添加新的设备类&#xff0c;必须修改的文件有 usbd_desc.cusbd_conf.cusb_device.c 需要…

【母线槽分类与选型】

母线槽是一种高效、安全、节能的输电设备&#xff0c;广泛应用于各类建筑和工业领域。母线槽可以根据不同的分类方式进行划分&#xff0c;例如根据其结构、用途、导体材质等。母线槽以铜或铝作为导体、用非烯性绝缘支撑&#xff0c;然后装到金属槽中而形成的新型导体。在高层建…

一些任务调度的概念杂谈

任务调度 1.什么是调度任务 依赖&#xff1a;依赖管理是整个DAG调度的核心。调度依赖包括依赖策略和依赖区间。 依赖分为任务依赖和作业依赖&#xff0c;任务依赖是DAG任务本身的依赖关系&#xff0c;作业依赖是根据任务依赖每天的作业产生的。两者在数据存储模型上有所不同…

Unifying Top-down and Bottom-up Scanpath Prediction Using Transformers

Abstract 大多数视觉注意力模型旨在预测自上而下或自下而上的控制&#xff0c;这些控制通过不同的视觉搜索和自由观看任务进行研究。本文提出了人类注意力变换器&#xff08;Human Attention Transformer&#xff0c;HAT&#xff09;&#xff0c;这是一个能够预测两种形式注意力…

解决MindSpore-2.4-GPU版本的安装问题

问题背景 虽说在MindSpore-2.3之后的版本中不在正式的发行版中支持GPU硬件后端&#xff0c;但其实在开发分支版本中对GPU后端是有支持的&#xff1a; 但是在安装的过程中可能会遇到一些问题或者报错&#xff0c;这里复现一下我的Ubuntu-20.04环境下的安装过程。 Pip安装 基本的…

【拥抱AI】如何使用BERT等预训练模型计算语义相似度

使用BERT等预训练模型计算语义相似度是一种非常有效的方法&#xff0c;可以捕捉句子之间的深层次语义关系。下面是一个详细的步骤指南&#xff0c;介绍如何使用BERT和Sentence-BERT来计算语义相似度。 1. 环境准备 1.1 安装必要的库 首先&#xff0c;确保你已经安装了必要的…

Excel常用技巧分享

excel单元格内换行 直接按回车会退出当前单元格的编辑&#xff0c;如果需要在单元格中换行&#xff0c;需要按下AltEnter。 excel插入多行或多列 WPS 在WPS中想要插入多行&#xff0c;只需在右键菜单中输入对应的数字即可。 Office Excel excel中相对麻烦一些&#xff0c;比…

C# .NET环境下调用ONNX格式YOLOV8模型问题总结

我的环境是&#xff1a; Visual Studio: 2019 显卡&#xff1a; 一、遇到问题 1、EntryPointNotFoundException:无法在DLL“onnxruntime”中找到名为“OrtGetApiBase”的入口点。差了下原因&#xff0c;入口点是启动项中的问题。 原因&#xff1a;之前用yolov7时安装的版本在C…

【PTA】【数据库】【SQL命令】编程题1

数据库SQL命令测试题1 10-1 显示教工编号以02开头的教师信息 作者 冰冰 单位 广东东软学院 显示教工编号以02开头的教师信息 提示&#xff1a;请使用SELECT语句作答。 表结构: CREATE TABLE teacher ( TId CHAR(5) NOT NULL, -- 教师工号&#xff0c;主键 DId CHAR(2) …

VSCode快速生成vue组件模版

1&#xff0c;点击设置&#xff0c;找到代码片段 2&#xff0c;搜索vue&#xff0c;打开vue.json 3&#xff0c;添加模版 vue2模板 "vue2": {"prefix": "vue2","body": ["<template>"," <div>$0</di…

理解DOM:前端开发的基础

理解DOM 在前端开发中&#xff0c;DOM&#xff08;文档对象模型&#xff09;是一个至关重要的概念。它不仅定义了如何通过编程方式访问和修改网页内容&#xff0c;还为我们提供了一种结构化的方式来与页面交互。本文将带你了解DOM的基本概念、不同节点的操作以及何时可以进行更…

如何将几个音频合成一个音频?非常简单的几种合成方法

如何将几个音频合成一个音频&#xff1f;音频合成不仅仅是将不同的音频文件按顺序排列&#xff0c;它还可能涉及到音量调节、剪辑、淡入淡出、音效调整等多个方面。对于一些专业的音频制作人员来说&#xff0c;音频的每一部分细节都可能需要精心打磨&#xff0c;以确保最终合成…

虚拟化表格(Virtualized Table)性能优化

文章目录 功能介绍一开始的代码领导让我们分析一下开始优化如何监听事件和传参&#xff1f;定位操作栏更加优化 功能介绍 菜鸟最近做的一个功能如下&#xff1a; 后端返回两个很大的数组&#xff0c;例如&#xff1a;数组a 1w条&#xff0c;数组b 2w条&#xff0c;然后要操作b…

Orcad 输出有链接属性的PDF

安装adobe pdf安装Ghostscript修改C:\Cadence\SPB_16.6\tools\capture\tclscripts\capUtils\capPdfUtil.tcl ​ 设置默认打印机为 Adobe PDF ​ 将Ghostscript的路径修改正确 打开cadence Orcad &#xff0c;accessories->candece Tcl/Tk Utilities-> Utilities->PD…

从源头保障电力安全:输电线路动态增容与温度监测技术详解

在电力系统中&#xff0c;输电线路是电能传输的关键环节。然而&#xff0c;当导线温度过高时&#xff0c;会加速导线老化&#xff0c;降低绝缘性能&#xff0c;甚至引发短路、火灾等严重事故&#xff0c;对电网安全运行构成巨大威胁。近日&#xff0c;某地区因持续高温和用电负…