我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue函数式组件专篇深入分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue函数式组件专篇深入分析

函数式组件的实现相对容易。一个函数式组件本质上就是一个普通函数,该函数的返回值是虚拟DOM。

在用户接口层面,一个函数式组件就是一个返回虚拟DOM的函数,如下面的代码所示:

function MyFuncComp(props){
	return {type:'h1',children: porps.title}
}

函数式组件没有自身状态,但仍然可以接收由外部传入的props。为了给函数式组件定义props,需要在组件函数上添加静态的props属性,如下面代码所示:

function MyFuncComp(props){
	return {type:'h1',children:props.title}
}
// 定义props
MyFuncComp.props = {
	title: String
}

在有状态组件的基础上,实现函数式组件将变得非常简单,因为挂载组件的逻辑可以复用mountComponent函数,为此,需要在patch函数内支持函数类型的vnode.type,如下面patch函数的代码所示:

function patch(n1,n2,container, anchor){
	if(n1 && n1.type !== n2.type){
		unmount(n1)
		n1 = null
	}
 	const {type} = n2
	if(typeof type === 'string'){
		// 省略部分代码
	}else if(type === Text) {
		// 省略部分代码
	}else if(type === Fragment) {
		// 省略部分代码
	}else if(type === 'object' || typeof type === 'function') {
		// component
		if(!n1){
			mountComponent(n2,container,anchor)
		}else{
			patchComponent(n1,n2,anchor)
		}
	}
}

在patch函数内部,通过检测vnode.type的类型来判断组件的类型

  • 如果vnode.type是一个对象,则它是一个有状态组件,并且vnode.type是组件选项对象;
  • 如果vnode.type是一个函数,则它是一个函数式组件

下面是修改后的mountComponent函数,其支持挂载函数式组件:

function mountComponent(vnode,container,anchor){
	// 检查是否是函数式组件
	const isFunctional = typeof vnode.type === 'function'
	let componentOptions = vnode.type
	if(isFunctional){
		// 如果是函数式组件,则将vnode.type作为渲染函数,将vnode.type.props作为props选项定义即可
		componentOptions = {
			render:vnode.type,
			props: vnode.type.props
		}
	}
	// 省略部分代码
}

实现对函数式组件的兼容非常简单。首先,在mountComponent函数内检查组件的类型,如果是函数式组件,则直接将组件函数作为组件选项对象的render选项,并将组件函数的静态props属性作为组件的props选项即可。

当然,出于更加严谨的考虑,我们需要通过isFunctional变量实现选择性地执行初始化逻辑,

到此这篇关于Vue函数式组件专篇深入分析的文章就介绍到这了,更多相关Vue函数式组件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue函数式组件专篇深入分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue函数式组件专篇深入分析

Vue提供了一种称为函数式组件的组件类型,用来定义那些没有响应数据,也不需要有任何生命周期的场景,它只接受一些props来显示组件,下面这篇文章主要给大家介绍了关于Vue高级组件之函数式组件的使用场景与源码分析的相关资料,需要的朋友可以参考下
2023-01-05

Vue组件通信深入分析

对于vue来说,组件之间的消息传递是非常重要的,用vue可以是要组件复用的,而组件实例的作用域是相互独立,这意味着不同组件之间的数据无法互相引用,一般来说,组件之间可以有几种关系,下面是我对组件之间消息传递的常用方式的总结
2022-11-13

Golang函数式编程深入分析实例

习惯与函数式编程语言的开发者,会认为for循环和if判断语句是冗长的代码,通过使用map和filter处理集合元素让代码更可读。本文介绍Go闭包实现集合转换和过滤功能
2023-01-10

深入探讨Vue 3中的组合式函数编程方式

Vue 3中引入了组合式函数编程方式,可以更好地实现代码的复用和可维护性。通过定义可组合的函数,可以将组件的逻辑和状态进行拆分和组合,实现更灵活的代码组织方式。同时,组合式函数也支持响应式数据和生命周期钩子函数,更加贴近Vue开发的实际场景
2023-05-18

深入剖析 VUE Mixins 的运作原理:揭开组件间共享数据的幕后秘密

Vue Mixins 深入剖析:组件间代码复用的幕后功臣
深入剖析 VUE Mixins 的运作原理:揭开组件间共享数据的幕后秘密
2024-02-13

编程热搜

目录