vu3知识点

>>>Templata支持多个根标签...<<<

1、初识setup
1、setup是Vue3中一个新的配置项,值为一个函数;

2、组件中所要用到的数据、方法等,均要配置在setup中;

3、setup的两种返回值:

(1):若返回一个对象,则对象中的属性、方法,均可以在模板中直接使用;

(2):若返回一个渲染函数:则可以自定义渲染内容;

setup的两个注意点:

1、setup执行时机,在beforeCreate之前执行一次,this是undefined;

2、setup的参数:

attrs:值为对象,包含组件外部传递过来,但没有在props配置中声明的属性,相当于this.$attrs;

slots:收到的插槽内容,相当于this.$slots;

emit:分发自定义事件的函数,相当于this.$emit。

2、ref函数
1、作用:定义一个响应式数据

2、语法:const xxx=ref(initValue)

创建一个包含响应式数据的引用对象(reference对象,简称ref对象);

js中操作数据:xxx.value;

模块中读取数据不需要value,直接{{xxx}};

3、备注

接收的数据可以是基本类型也可以是对象类型;

基本类型的数据响应式依然靠Object.defineProperty()的get和set完成的;

对象类型的数据:内部求助了Vue3中的一个新函数---reactive函数;

3、reactive函数

作用:定义一个对象类型的响应式数据(基本类型用ref);

语法:const 代理对象=reactive(被代理对象)接收一个对象(或数组),返回一个代理对象(proxy对象);

4,生命周期:

beforeCreate===>Not needed*
created===>Not needed*
beforeMount ===>onBeforeMount
mounted===>onMounted
beforeUpdate===>onBeforeUpdate
updated===>onUpdatedupdated
beforeUnmount==>onBeforeUnmount
unmounted==>onUnmounted

备注1:最早只能在 onBeforeMount 获取axios数据,且里面不能操作dom
备注2:全局解绑已经没有了。onBeforeUnmount 和 onUnmounted
备注3:dom操作,除了常规的clas style等,可以通过ref,但是在vue3的 Composition API中,需要定义成变量,么有$refs了

5、main.js的变化

2.x 全局 API( Vue)3.x 实例 API(app)
Vue.config.xxxxapp.config.xxxx
Vue.componentapp.component
Vue.directiveapp.directive
Vue.mixinapp.mixin
Vue.useapp.use
Vue.prototypeapp.config.globalProperties
Vue.config.productionTip移除

vue2中可以通过Vue.prototype去操作原型,在vue3中只能通过app.config.globalProperties,当时玩的时候还以为自己写错了,修改的这些你会发现改动的东西挺多的变量

6.指令与插槽

vue2中使用slot可以直接使用slot,而vue3中必须使用v-slot的形式
v-for与v-if在vue2中优先级高的是v-for指令,而且不建议一起使用
vue3中v-for与v-if,只会把当前v-if当做v-for中的一个判断语句,不会相互冲突
vue3中移除keyCode作为v-on的修饰符,当然也不支持config.keyCodes
vue3中移除v-on.native修饰符
vue3中移除过滤器filter
举例键盘回车事件
setup(){
    const handleKeydown = (event:any) => {
      if (event.code === 'Enter') {
        // 处理按下回车键的逻辑
        console.log('Enter 键被按下');
      }
    };
    onMounted(() => {
      window.addEventListener('keydown', handleKeydown);
    });
    onUnmounted(() => {
      window.removeEventListener('keydown', handleKeydown);
    });
}

7,vue3的响应式原理(proxy)

v-model ..proxy

8,vue3中computed

变为组合式Api,那么意味着需要引入,当前如果需要去修改,就需要去终结computed

 const number = ref(5);

const double = computed(() => {
	return number.value * 2;
});

return {double}

9,router

<template>
  <div>
    <!-- 路由链接 -->
    <router-link to="/about">关于我们</router-link>

    <!-- 路由视图 -->
    <router-view></router-view>
  </div>
</template>

<script>
import { useRouter } from 'vue-router';

export default {
  setup() {
    const router = useRouter();

    // 在某个事件或方法中进行路由跳转
    const navigateToAbout = () => {
      router.push('/about');
    };

    return {
      navigateToAbout
    };
  }
};
</script>

10,hooks模式

提纯代码,可以把逻辑放到单独的文件中,甚至可以复用hooks

<template>
  <div class="about">
    <h1>This is an about page</h1>
    <button @click="handleClick">{{state.count}}{{state.doubble}}</button>
  </div>
</template>
<script>
	import {useCount} from "../hooks/useCount.js"
	export default{
		setup(){
			let {state, handleClick} = useCount();

			return {
				state,
				handleClick
			}
		}
	}
</script>

<!--hooks的文件useCount.js-->
import {
	reactive,
	computed
} from "vue"

export function useCount() {
	const state = reactive({
		count: 0,
		doubble: computed(() => state.count * 2)
	});

	function handleClick() {
		state.count++;
	}
	return {
		state,
		handleClick
	}
}

vue2 和vue3的大致区别

1.源码组织方式变化:使用 TS 重写
2.支持 compositionAPI,基于函数的 api,更灵活组织组件逻辑(Vue2 使用 options api) 
3.响应式系统提升:Vue3 的响应式数据原理改成了 Proxy,可以监听动态新增删除属性,以及数组变化 
4.编译优化:Vue 通过标记静态根节点来优化 Diff,Vue 则标记和提升所有静态根节点,Diff 的时候只需要去对比动态节点的内容 
5.打包体积优化:移除了一些不常用的 api(inline-template,filter)
6.生命周期的变化,使用 setup 替代了 beforeCreate 和 created
7.template 支持多个根标签
8.Vuex 状态管理,创建实例的方式,Vue2 使用 new store;Vue3 使用 createStore;
9.Route 获取页面实例以及路由信息,Vue2 使用 this 的方式获取;而 Vue3 采用 getCurrentInstance/userRoute,userRouter 的方式来获取
10.对 props 的使用:Vue2 通过 this 的方式使用;Vue3 则直接通过 props 使用;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值