博客
关于我
Vue学习—深入剖析函数式组件
阅读量:368 次
发布时间:2019-03-05

本文共 2058 字,大约阅读时间需要 6 分钟。

函数式组件

当组件不需要状态、生命周期处理或复杂的响应式数据时,可以将其定义为函数式组件。这种组件仅通过props接收输入数据进行渲染。

函数式组件的特点

函数式组件的核心特点在于其简洁性和灵活性。它通过render函数接收context对象,包含必要的上下文信息,如props、slots、children等。这些信息帮助组件在渲染过程中实现复杂的逻辑和结构化的组件组合。

props和slots

props的作用

props是组件接收的属性参数。它们可以通过context对象在render函数中访问。例如:

export default {  functional: true,  props: {    level: {      type: Number,      required: true    }  },  render(h, context) {    const { props } = context;    const tag = `h${props.level}`;    return 
{slots().default}
; }};

slots的使用

slots用于定义插槽。插槽可以是非作用域的默认插槽或具名插槽。例如:

export default {  functional: true,  render(h, context) {    const { slots, scopedSlots } = context;    return (      

{slots().default() // 默认插槽 scopedSlots.default({ text: '默认插槽' }) // 具名插槽

); }};

data、listeners、injections和children

data

data对象提供了组件的上下文信息,包括父组件的引用等。例如:

export default {  functional: true,  render(h, context) {    const { data } = context;    console.log(data);    // 渲染逻辑  }};

listeners

listeners用于接收父组件注册的事件监听器。例如:

export default {  functional: true,  render(h, context) {    const { listeners } = context;    console.log(listeners);    // 渲染逻辑  }};

injections

injections用于从父组件注入必要的属性。例如:

export default {  functional: true,  inject: ['name'],  render(h, context) {    const { injections } = context;    console.log(injections);    // 渲染逻辑  }};

children

children用于处理组件的子节点。这些子节点可以是其他组件或普通的DOM元素。例如:

export default {  functional: true,  render(h, context) {    const { children } = context;    console.log(children);    // 渲染逻辑  }};

slots()与children的区别

示例1

div

p

  • slots() 结果:
    {  default: [div, p, template],  header: [div]}
  • children 结果:
    [div, p, template]

示例2

p

  • slots() 结果:
    {  default: [div],  header: [div]}
  • children 结果:
    [div, p, template]

基于模板的函数式组件

在 Vue 2.5.0 及以上版本中,可以使用 <template functional> 标签定义基于模板的函数式组件。这种方式适用于单文件组件。

通过上述方法,可以轻松创建高效且灵活的函数式组件,充分发挥 Vue.js 的优势。

转载地址:http://mjywz.baihongyu.com/

你可能感兴趣的文章
boot.img 解包与打包
查看>>
Android4.4 平板背光设置
查看>>
递归复习--二叉搜索树
查看>>
jvm-02
查看>>
spring boot@Value和bean执行顺序问题
查看>>
从浏览器输入网址到服务器返回经历的过程
查看>>
解决Genymotion无法拖拽的问题
查看>>
中国石油大学《计算机文化基础》在线考试(客观题)
查看>>
强化学习(8):Asynchronous Advantage Actor-Critic(A3C)算法
查看>>
中国石油大学《 管理心理学(行政管理专业禁选)》在线考试
查看>>
机器学习(numpy/matplotlib/scipy)学习笔记
查看>>
HTML CSS JS 特殊字符表
查看>>
codeforces The Eternal Immortality 题解
查看>>
蓝桥杯 历届试题 幸运数 (堆+DFS)
查看>>
(SDUT 2159)山东省第一届ACM省赛 Ivan comes again! (set集合综合运用)
查看>>
微信js-sdk使用简述(分享,扫码功能等)
查看>>
selenium 的介绍和爬取 jd数据
查看>>
python-selenium优化方案
查看>>
服务器 centos 系统漏洞快速修复简易方法
查看>>
【分享-一键在线抠图】在线免费去除图片背景
查看>>