# 函数式组件

  • 使组件无状态(没有 data)和无实例(没有 this 上下文)
  • 函数式组件不会被看成一个真正的组件,render 生成的是普通的 Vnode,不会有递归子组件的过程。

patch 过程如果遇到一个节点是组件 vnode ,会递归执行子组件的初始化过程

Vue.component('my-component', {
  functional: true,
  // Props 是可选的
  props: {
    // ...
  },
  // 为了弥补缺少的实例
  // 提供第二个参数作为上下文
  render: function (createElement, context) {
    // ...
  }
})

<template functional>
  <div class="cell">
    <div v-if="props.value" class="on"></div>
    <section v-else class="off"></section>
  </div>
</template>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19