Vue3新特性

Vue3.0提升了性能,支持Treeshaking优化打包体积。引入CompositionAPI,提供Fragment,Teleport,Suspense等新特性,并加强了对TypeScript的支持。此外,setup函数中使用ref和reactive管理状态,不再需要this。生命周期函数改用onBeforeMount等,可以多次调用。同时,通过provide和inject实现跨组件数据传递。
摘要由CSDN通过智能技术生成

六大亮点

  • Performance:性能比Vue2.0强
  • Tree shaking support:可以将无用模块剪辑,仅打包需要的(项目打包变小)
  • Composition API:组合api
  • Fragment,Teleport,Suspense:‘碎片’,Teleport即Protal传送门,‘悬念’
  • Better TypeScript support:更优秀的Ts支持
  • Custom Renderer API:暴露了自定义渲染API

ref或者reactive
需要将ref,reactive从vue中引入

import {ref,reactive} from 'vue'

setup中使用,并要return出去

setup(){
	//ref
	const mesg=ref('消息')
	//复杂类型使用reactive定义
	const obj=reactive({
		list:['1','2','3']
	})
	//修改值的内容通过.value形式
	const fun = ()	=>	{
		mesg.value='新消息'
	}

	//return 出去之后可以直接在页面中使用{{}}使用
	return {
 		mesg,
 		obj,
 		fun 
	}

}

props传值以及setup中不使用this

在父组件中绑定需要传值的数据

<HelloWorld dataContext='数据'></HelloWorld>

子组件中接收参数props

//使用props定义接收参数的类型
props:{
	dataContext:String
}
setup(props,ctx){
	//打印内容1
	console.log(props.dataContext)
	const receber=props.dataContext
	
	//setup中不使用this访问组件实例,使用context
	//打印内容2
	console.log(ctx)
	
	return {
		receber
	}
}

打印内容1
在这里插入图片描述
打印内容2
在这里插入图片描述
setup中的生命周期

  • 在setup中使用生命周期函数
  • setup中没有beforeCreate和Created
  • setup是处于生命周期函数 beforeCreate 和 Created 两个钩子函数之前执行。且只执行一次。
  • 使用需要在前面加on来访问组件的生命周期函数且需要被引入
  • onBeforeMount/onMounted/onBeforeUpdate/onUpdated/onBeforeUnmount/onUnmounted
//需要引入生命周期函数
import { onMounted} from 'vue'
//在setup中使用
setup(){
	 // 比以前的优势,以前同一个生命周期函数只能存在一个,现在可以存在多个
	onMounted(()=>{
		console.log('生命周期函数onMounted1')
	})
	onMounted(()=>{
		console.log('生命周期函数onMounted2')
	})
}

在这里插入图片描述

组件传值provide/inject

  • provide()和inject()可以实现嵌套组件之间的数据传递
  • 这两个函数只能在setup()函数中使用
  • 父级组件中使用provide()函数向下传递数据
  • 子组件中使用inject()函数获取从上层传递过来的数据
  • 不限层级

在父组件中引入provide

import {provide,reactive} from 'vue'
//在setup中使用
setup(){
	//provide('key','需要传递的数据')
	provide('message','我是消息')
	provide('obj',obj)
	//可以传递复杂类型数据
	const obj = reactive({name:'一个姓名',age:188})
	return {
	obj 
	}
}

在子组件中引入inject

import {inject} from 'vue'
//在setup中使用
setup(){
	//inject(需要接收的数据)
	const msg =	inject('message')
	const nnn =	inject('obj')
	return {
	msg,
	nnn
	}
}
<template>
  <div>
    <h1>{{ msg }}</h1>
    <h1>{{ nnn.name }}</h1>
  </div>
</template>

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值