深入理解vue.js——组件

作者: 缘自世界 | 来源:发表于2018-05-01 23:08 被阅读0次

熟悉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函数渲染没有编译过程,相当于使用者直接将代码给程序。所以,使用它对使用者要求高,且易出现错误。
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。

相关文章

  • 深入理解vue.js——组件

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

  • Vue代码规范——组件/实例选项顺序

    组件/实例选项应该有统一的顺序。下面是Vue.js 官方推荐的组件选项默认顺序。参考《深入浅出Vue.js》。 挂...

  • Vue 组件

    对组件的理解 : 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,...

  • Vue.js框架的理解

    面试官:聊聊对Vue.js框架的理解 分享目标: 了解 Vue.js 的组件化机制 了解 Vue.js 的响应式系...

  • VUE2.0 自定义组件初体验

    我的理解 组件(Component)是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的...

  • 超全面的vue.js使用总结

    一、Vue.js组件 ****vue.js构建组件使用**** Vue.component(``'componen...

  • 2018-09-20 vue.js 组件

    vue.js 组件 组件(Component)是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封...

  • 理解 Vue 生命周期钩子

    参照翻译 Understanding Vue.js Lifecycle Hooks 理解组件的生命周期,有利于我们...

  • vue修改对象属性,视图不更新this.$set和Vue.nex

    vue.js是以数据驱动和组件化的思想构建的,相比于其他库,Vue.js提供了更加简洁、更易于理解的API,使得我...

  • Jetpack-Lifecycle

    【AAC 系列二】深入理解架构组件的基石:LifecycleAndroid官方架构组件Lifecycle:生命周期...

网友评论

    本文标题:深入理解vue.js——组件

    本文链接:https://www.haomeiwen.com/subject/mgafrftx.html