浅谈vue首次渲染全过程

当浏览器加载 Vue 应用时,Vue 应用会随即进行一系列的初始化操作,最后通过 mount() 方法将 Vue 实例挂载到文档区域中。下面是Vue首次渲染的完整过程:

准备阶段

创建Vue实例对象

在该阶段,Vue会根据传入的配置项,创建Vue实例对象。在创建实例对象过程中,Vue会做以下工作:

  • 读取 data 属性中的数据,并转为响应式数据
  • 当数据变化时会触发组件的重新渲染
  • 对配置项进行处理,比如对生命周期钩子函数进行初始化等
  • 通过观察者模式与订阅者模式进行绑定,用于更新数据的时候通知对应的 DOM 更新。

下面是一个简单的 Vue 实例示例:

new Vue({
  el: '#app',
  data: {
    message: 'Hello, Vue!'
  }
})

构造 Virtual DOM

在创建 Vue 实例对象完成后,Vue 应用开始构造 Virtual DOM,将将模板转化为 AST,再将 AST 转化为 VNode,最终创建出 Virtual DOM。Virtual DOM 是以 JavaScript 对象的形式表示真实 DOM 的树形结构。

生成真实 DOM 结构

Vue 应用会通过 Virtual DOM,将数据渲染为真实的 DOM。

挂载阶段

将 Virtual DOM 转化为真实 DOM

在完成上述两个步骤后,Vue 应用会接下来对 Virtual DOM 进行 diff 操作,生成一系列操作真实 DOM 对象的列表,对比上次更新的虚拟 DOM 树以及新的虚拟 DOM 树的区别和差异,最终将 Virtual DOM 转为真实 DOM。

完成挂载并首次渲染成功

当整个 Vue 应用的核心实例创建,生成 Virtual DOM,并且将 Virtual DOM 转化为真实 DOM 对象的步骤完成后,Vue 就会一次性将生成的真实 DOM 挂载到应用中。

以下是一个简单的 Vue 应用示例,演示 Vue 实例的生命周期:

<!DOCTYPE html>
<html>
<head>
  <title>Vue.js First Render</title>
</head>
<body>
  <div id="app">
    {{ message }}
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue"></script>

  <script>
    new Vue({
      el: '#app',
      data: {
        message: 'Hello, Vue!'
      },
      beforeCreate() {
        console.log('beforeCreate');
      },
      created() {
        console.log('created');
      },
      beforeMount() {
        console.log('beforeMount');
      },
      mounted() {
        console.log('mounted');
      }
    });
  </script>
</body>
</html>

该应用的页面中,Vue 实例只渲染了一个 div 元素,且绑定了模板字符串 {{ message }}。在 Vue 实例的生命周期中,beforeCreatecreatedbeforeMountmounted 四个函数会依次被调用,这是因为 Vue 实例对象是按照生命周期的步骤一步一步创建、渲染的。其中 beforeCreatecreated 分别代表了 Vue 实例的创建过程,beforeMountmounted 则代表了 Vue 实例在挂载到文档中后的生命周期步骤。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈vue首次渲染全过程 - Python技术站

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

相关文章

  • vue项目在打包时,如何去掉所有的console.log输出

    在 Vue 项目中,我们通常使用 webpack 进行打包,可以通过插件和配置的方式来去除 console.log 输出。 下面提供两种常见的方法: 方法一:使用插件 webpack 插件 babel-plugin-transform-remove-console 可以在打包时移除所有 console.log 输出。 安装 babel-plugin-tran…

    Vue 2023年5月28日
    00
  • vue实现输入框的模糊查询的示例代码(节流函数的应用场景)

    我来详细讲解一下“Vue实现输入框的模糊查询的示例代码(节流函数的应用场景)”。 1. 简介 输入框模糊查询是Web开发中常见的功能,Vue作为流行的前端框架,可以很方便的实现这个功能,并且由于其响应式特性,在用户输入信息时不需要刷新整个页面,提供了更好的用户体验。 2. Vue实现输入框的模糊查询的示例代码 下面是一个简单的输入框模糊查询的示例: <…

    Vue 2023年5月27日
    00
  • JS实现点击链接切换显示隐藏内容的方法

    当我们需要将网页中的内容显示和隐藏时,我们可以使用JavaScript来实现。具体的实现方式有多种,下面是两种使用JS实现点击链接切换显示隐藏内容的方法: 一、使用display属性 为需要隐藏或显示的内容添加一个id属性 <p id="content1">这是需要显示和隐藏的内容</p> 在CSS中设置默认样式 …

    Vue 2023年5月28日
    00
  • 浅谈vue生命周期共有几个阶段?分别是什么?

    当我们使用Vue.js开发应用时,组件会自动地创建、渲染、更新和销毁,这正是Vue.js的生命周期。Vue.js生命周期可以帮助我们了解整个Vue组件的运行过程,这对于开发和调试Vue应用程序非常有帮助。 Vue.js生命周期共有8个阶段,分别是: beforeCreate:组件实例被创建之初,组件属性计算之前,这个阶段的生命周期函数无法访问到组件的属性和方…

    Vue 2023年5月28日
    00
  • vue路径写法之关于./和@/的区别

    当使用Vue构建项目时,路径写法是必不可少的知识点,对于路径写法中的”./”与”@/”的区别,以下是详细讲解: 1. 相对路径”./” 使用相对路径”./”,我们可以引用同一目录下的文件或目录。例如,有以下文件目录结构: ├── src │ ├── components │ │ ├── a.vue │ │ ├── b.vue │ ├── views │ │ …

    Vue 2023年5月28日
    00
  • 基于Vue.js与WordPress Rest API构建单页应用详解

    那么让我为你详细讲解“基于Vue.js与WordPress Rest API构建单页应用详解”的完整攻略。 概述 本文将介绍如何使用Vue.js和WordPress Rest API构建单页应用。使用Vue.js和WordPress Rest API结合,可以轻松快速的创建现代化的单页应用。Vue.js是一个用于构建用户界面的JavaScript框架,而Wo…

    Vue 2023年5月28日
    00
  • 解决vue中对象属性改变视图不更新的问题

    当我们在Vue组件中把一个对象作为一个属性传递给子组件,如果我们修改了对象中的属性的值,那么Vue默认是不会触发视图更新的,这是因为Vue在比较对象时是通过引用地址比较的,而不是对象内部属性的值比较。这就导致了当对象中属性值改变后,我们需要手动通知Vue去更新视图的问题。 下面是解决vue中对象属性改变视图不更新的步骤: 方案一:使用vm.$set()方法更…

    Vue 2023年5月28日
    00
  • 详细聊聊Vue的混入和继承

    详细聊聊Vue的混入和继承 什么是混入? 混入是一个编程技术,它可以将一个对象的所有属性复制到另一个对象上。在Vue中,混入可以用来在多个组件之间共享代码。具体来说,混入提供了一种将重复代码抽象成可重用性组件的方式,而不是从对一个组件的功能进行继承。 下面是一个示例: // 混入对象 const myMixin = { data() { return { m…

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