深入理解vue.js——组件

简介: 熟悉vue或者研究过vue源码的同学都知道,组件是vue最重要的部分之一,而写组件由两种常见的方式: template模板 render渲染函数式的 template式的组件 template式的组件有两种常见的形式: 第一种: {{ msg }} Vue.

熟悉vue或者研究过vue源码的同学都知道,组件是vue最重要的部分之一,而写组件由两种常见的方式:

  • template模板
  • render渲染函数式的

template式的组件

template式的组件有两种常见的形式:

第一种:

<template>
    <div class="hello">
        {{ msg }}
    </div>
</template>

<script>
Vue.component('hello', {
    data() {
        return {
            msg: 'hello world.'
        }
    }
})
</script>

第二种:

Vue.component('hello', {
    data() {
        return {
            msg: 'hello world.'
        }
    },
    template: `<div class="hello"> {{ msg }} </div>`
})

在项目开发中,第一种比较常见。

render渲染函数组件

同样,vue本身也提供了性能更高的render函数渲染的组件。

Vue.component('hello', {
    data() {
        return {
            msg: 'hello world.'
        }
    },
    render: function(el) {
        return el(
            'div',
            this.msg
        )
    }
})

关于render的用法,可以参考vue.js官方文档介绍。地址

关于render的示例,可以参考bootstrap-vue的源码,它的组件很多都是使用render的。GitHub地址

render函数渲染 VS template模板

  • 后者适合逻辑简单,前者适合复杂逻辑。
  • 后者属于声明是渲染,前者属于自定Render函数。声明式渲染,使用者理解起来相对容易,但灵活性不足;自定义render函数灵活性高,但对使用者要求较高。
  • 前者的性能较高,后者性能较低。这一点我们可以看一下,下图中vue组件渲染的流程图可知。
  • 基于上一点,我们通过vue组件渲染流程图知道,使用render函数渲染没有编译过程,相当于使用者直接将代码给程序。所以,使用它对使用者要求高,且易出现错误。
img_8dfe0c48406f44c60b1bd0493b592946.png
vue组件渲染的流程图

特殊组件

在vue中有一个特殊的组件,示例代码如下:

var vm = new Vue({
    data() {
        return {
            msg: 'hello world.'
        }
    },
    el: '#app'
})

这个特殊的组件指定我们使用vue的容器,并初始化一些数据。

虚拟DOM

虚拟DOM是vue.js的核心概念之一,vue.js使用js模拟DOM原型树,这就是我们常挂在嘴边的VNode。

vue.js发现模板的数据发生改变(vue是数据驱动的框架,这也是MVVM与传统的DOM结构驱动的区别),将会生成新的虚拟DOM,vue.js通过Diff算法来对比跟原来的Vnode是否相同来决定是否渲染该虚拟DOM,不相同则渲染。同时,vue2.x支持服务端的渲染。

后续可能还会继续修改,也欢迎各位批评指正。有问题或者有其他想法的可以在我的GitHub上pr。

相关文章
|
1月前
|
JavaScript
在 Vue 中处理组件选项与 Mixin 选项冲突的详细解决方案
【10月更文挑战第18天】通过以上的分析和探讨,相信你对在 Vue 中使用 Mixin 时遇到组件选项与 Mixin 选项冲突的解决方法有了更深入的理解。在实际开发中,要根据具体情况灵活选择合适的解决方案,以确保代码的质量和可维护性。
87 7
|
1天前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
16 8
|
1天前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
15天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
15天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
1月前
|
缓存 JavaScript UED
Vue 的动态组件与 keep-alive
【10月更文挑战第19天】总的来说,动态组件和 `keep-alive` 是 Vue.js 中非常实用的特性,它们为我们提供了更灵活和高效的组件管理方式,使我们能够更好地构建复杂的应用界面。深入理解和掌握它们,以便在实际开发中能够充分发挥它们的优势,提升我们的开发效率和应用性能。
45 18
|
26天前
|
缓存 JavaScript UED
Vue 中实现组件的懒加载
【10月更文挑战第23天】组件的懒加载是 Vue 应用中提高性能的重要手段之一。通过合理运用动态导入、路由配置等方式,可以实现组件的按需加载,减少资源浪费,提高应用的响应速度和用户体验。在实际应用中,需要根据具体情况选择合适的懒加载方式,并结合性能优化的其他措施,以打造更高效、更优质的 Vue 应用。
|
1月前
|
前端开发 UED
vue3知识点:Suspense组件
vue3知识点:Suspense组件
34 4
|
30天前
|
JavaScript 前端开发 测试技术
组件化开发:创建可重用的Vue组件
【10月更文挑战第21天】组件化开发:创建可重用的Vue组件
25 1
|
1月前
|
JavaScript 前端开发 Java
《vue3第五章》新的组件,包含:Fragment、Teleport、Suspense
《vue3第五章》新的组件,包含:Fragment、Teleport、Suspense
34 2