Vue 面试题
目录

Vue 中什么是函数式组件?

· 约 3 分钟读完 · 第 111 / 211 章

推荐答案

函数式组件是一种无状态(stateless)且无实例(no instance)的组件。它没有 this 上下文,也没有生命周期钩子函数。函数式组件通常用于渲染简单的 UI 组件,性能较高,因为它没有实例化的开销。

函数式组件的定义方式如下:

或者使用单文件组件(SFC)的方式:

本题详细解读

1. 什么是函数式组件?

函数式组件是 Vue 中的一种特殊组件类型,它没有内部状态(即没有 data),也没有实例(即没有 this)。它仅仅是一个纯函数,接收 props 和 context 作为参数,并返回一个虚拟 DOM 节点。

2. 函数式组件的特点

  • 无状态:函数式组件没有 data,因此它不会维护任何内部状态。
  • 无实例:函数式组件没有 this,因此无法访问实例方法或属性。
  • 高性能:由于没有实例化的开销,函数式组件的渲染性能通常比普通组件更高。
  • 无生命周期钩子:函数式组件没有生命周期钩子函数,因此无法使用 mounted、updated 等钩子。

3. 使用场景

函数式组件通常用于以下场景:

  • 纯展示型组件:例如按钮、标签、图标等,这些组件通常只依赖于 props 进行渲染。
  • 高阶组件:函数式组件可以作为高阶组件(HOC)的基础,用于封装和复用逻辑。
  • 性能优化:在需要渲染大量简单组件时,使用函数式组件可以减少内存占用和提高渲染性能。

4. 函数式组件的 context 参数

函数式组件的 render 函数接收两个参数:

  • createElement:用于创建虚拟 DOM 节点的函数。
  • context:包含组件上下文信息的对象,常用的属性有:
    • props:传递给组件的 props。
    • children:子节点数组。
    • data:传递给组件的所有属性、事件监听器等。
    • slots:插槽内容。

5. 示例代码

以下是一个简单的函数式组件示例:

在这个示例中,my-functional-component 是一个函数式组件,它接收 message 作为 props,并将其渲染到一个 div 元素中。