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

news2024/11/24 8:12:10

文章目录

    • 一、挂载方式
      • 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.coloradmin.cn/o/2246549.html

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

相关文章

(南京观海微电子)——GH7006+BOE2.6_GV026WVQ-N81-1QP0_800RGB480_MIPI_LVDS_RGB原理介绍

1. 原理介绍 2. 代码 // Model - GV026WVQ-1QP0 // IC - GH7006 // Width - 800 // Height - 480 // REV: - V01 // DATA - 20240507 // INTERFACE- MIPI //"Vfp" value"16" /> //"…

速度革命:esbuild如何改变前端构建游戏 (1)

什么是 esbuild? esbuild 是一款基于 Go 语言开发的 JavaScript 构建打包工具,以其卓越的性能著称。相比传统的构建工具(如 Webpack),esbuild 在打包速度上有着显著的优势,能够将打包速度提升 10 到 100 倍…

Excel的图表使用和导出准备

目的 导出Excel图表是很多软件要求的功能之一,那如何导出Excel图表呢?或者说如何使用Excel图表。 一种方法是软件生成图片,然后把图片写到Excel上,这种方式,因为格式种种原因,导出的图片不漂亮&#xff0c…

自动化运维-Linux通用性日志切割脚本

一、公司提供的参考脚本: #!/bin/bash # 定义需要清理的文件 log_file("/mpjava/ly.mp.dfpv.acc.biz/bin/nohup.out""/mpjava/ly.mp.dfpv.acc.service/bin/nohup.out"# 添加更多微服务的日志目录路径 ) # 获取当天日期 date_now$(date %Y%m%d)…

Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书

目录 一、CA机构 二、Lets Encrypt特点 三、申请SSL 一、CA机构 ‌Lets Encrypt‌是一个由非营利组织Internet Security Research Group (ISRG)运营的证书颁发机构(CA),旨在通过自动化和开放的方式为全球网站提供免费、可靠的SSL/TLS证书。…

Java连接MySQL数据库进行增删改查操作

Test 1 首先去查看一下MySQL的版本:mysql -V(在cmd中)记得要启动MySQL服务在cmd中验证是否可以登录数据库成功:mysql -u root -p(然后输入密码:root)Test 2 在IDEA创建项目在SQLyog中创建数据…

从搭建uni-app+vue3工程开始

技术栈 uni-app、vue3、typescript、vite、sass、uview-plus、pinia 一、项目搭建 1、创建以 typescript 开发的工程 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project2、安装sass npm install -D sass// 安装sass-loader,注意需要版本10,…

React (三)

文章目录 项目地址十二、性能优化12.1 使用useMemo避免不必要的计算12.2 使用memo缓存组件,防止过度渲染12.3 useCallBack缓存函数12.4 useCallBack里访问之前的状态(没懂)十三、Styled-Components13.1 安装13.2给普通html元素添加样式13.3 继承和覆盖样式13.4 给react组件添…

javascrip页面交互

元素的三大系列 offset系列 offset初相识 offset系列属性 作用 element.offsetParent 返回作为该元素带有定位的父级元素,如果父级没有定位,则返回body element.offsetTop 返回元素相对于有定位父元素上方的偏移量 element.offsetLeft 返回元素…

生成对抗网络(简要介绍)

生成对抗网络(Generative Adversarial Network,GAN)是一种深度学习模型架构,由 Ian Goodfellow 等人在 2014 年提出。GAN 由两个神经网络组成——生成器(Generator)和判别器(Discriminator&…

(C语言)文件操作

目录 文件 程序文件 数据文件 文件名 ​编辑数据文件的分类 文件的打开和关闭 流 标准流 1)stdin 2)stdout 3)stderr 文件指针 文件的打开和关闭 对文件内容操作的函数 1)fgetc,fputc 2)fp…

招商蛇口|在低密园林里,开启生活的“任意门”

“最好的建筑是这样的,我们深处在其中,却不知道自然在哪里终了,艺术在哪里开始。” 凭借深耕西安10载的城市远见,以及建立在成功人居经验之上的敏锐洞察,招商蛇口将林语堂名言里的生活,变成了现实。 都市化越是加速&…

【es6进阶】vue3中的数据劫持的最新实现方案的proxy的详解

vuejs中实现数据的劫持,v2中使用的是Object.defineProperty()来实现的,在大版本v3中彻底重写了这部分,使用了proxy这个数据代理的方式,来修复了v2中对数组和对象的劫持的遗留问题。 proxy是什么 Proxy 用于修改某些操作的默认行为&#xff0…

掌上单片机实验室 – RT-Thread + ROS2 初探(25)

在初步尝试RT-Thread之后,一直在琢磨如何进一步感受它的优点,因为前面只是用了它的内核,感觉和FreeRTOS、uCOS等RTOS差别不大,至于它们性能、可靠性上的差异,在这种学习性的程序中,很难有所察觉。 RT-Threa…

李宏毅机器学习课程知识点摘要(14-18集)

线性回归,逻辑回归(线性回归sigmoid),神经网络 linear regression , logistic regression , neutral network 里面的偏导的相量有几百万维,这就是neutral network的不同,他是…

ThingsBoard规则链节点:AWS SQS 节点详解

引言 ThingsBoard 是一个开源的物联网平台,提供了设备管理、数据收集、处理和可视化等功能。规则链是 ThingsBoard 中的一个强大功能,允许用户定义复杂的业务逻辑来处理设备上报的数据。在规则链中,AWS SQS 节点用于将消息发送到 Amazon Simp…

在Windows 11上启用远程桌面及其故障排查

在Windows 11上启用远程桌面 这将允许其它设备远程连接到你的电脑,并像坐在你的电脑前一样操纵你的电脑桌面。 启用方法很简单,先在设置中找到远程桌面。 点击进入后,点击右侧的滑钮启用远程桌面即可。 勾选启用网络级别验证使得登录者在能…

【H2O2|全栈】JS进阶知识(八)ES6(4)

目录 前言 开篇语 准备工作 浅拷贝和深拷贝 浅拷贝 概念 常见方法 弊端 案例 深拷贝 概念 常见方法 弊端 逐层拷贝 原型 构造函数 概念 形式 成员 弊端 显式原型和隐式原型 概念 形式 constructor 概念 形式 原型链 概念 形式 结束语 前言 开篇语…

RabbitMQ3:Java客户端快速入门

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

zotero7 插件使用

zotero style 1、下载地址 Zotero 插件商店 | Zotero 中文社区 2、配置 在工具插件里 3、配置 style 进入高级→设置编辑器 查找 easy 设置完即可显示, 注1:easyscholar的密钥要自行申请注册,注册地址:easySchol…