vue2.0缺陷
Vue 2 响应式并不是真正意义上的代理,而是基于 Object.defineProperty() 实现的。
这个 API 并不是代理,而是对某个属性进行拦截,所以有很多缺陷,比如:删除数据就无法监听,需要 $delete 等 API 辅助才能监听到。
并且,Option API 在组织代码较多组件的时候不易维护。对于Option API 来说,所有的 methods、computed 都在一个对象里配置,这对小应用来说还好。但代码超过 300 行的时候,新增或者修改一个功能,就需要不停地在 data,methods 里跳转写代码,我称之为上下反复横跳。
vue3.0做了哪些改变?
响应式系统:
Vue 2 的响应式机制是基于 Object.defineProperty() 这个 API 实现的,此外,Vue 还使用了Proxy,这两者看起来都像是对数据的读写进行拦截,但是 defineProperty 是拦截具体某个属性,Proxy 才是真正的“代理”。
全部模块使用 TypeScript 重构
类型系统带来了更方便的提示。
Composition API 组合语法:
<script setup></script>。
setup初始化数据
在vue2中 我们一般使用data函数初始化一些数据或者变量 vue3新增setup 变量包括方法都是在该函数里定义的。
setup中我们并不能直接使用this 可以试着打印this变为了undefined。在setup中如果我们需要使用到响应数据时 需要通过.value获取:
import { ref } from 'vue'
const count = ref(0)
console.log(count.value) // 0
ref函数
在setup函数中,可以使用ref函数,用于创建一个响应式数据,当数据发生改变时,Vue会自动更新UI
<template>
<div>
<h1>{{mycount}}</h1>
<button @click="changeMyCount">changeMyCount</button>
</div>
</template>
<script>
import { ref } from "vue";
export default {
name: "ref",
setup(){
const mycount = ref(2);
const changeMyCount = ()=>{
mycount.value = mycount.value + 2 ;
}
return { mycount, changeMyCount, }
}
};
</script>
TypeScript
类型注解
typescript支持静态类型 也就是说可以声明变量的类型声明变量类型后,其他任何类型的赋值都会引起编译错误 总体来说typescript更加严格 使代码更加规范
基础类型
let age:number = 18;
let name:string = ‘cyp’;
let weight:string | number = 120; // true
let weight:string | number = ‘120kg'; // true
let weight:string | number = true; // error
any任意类型
void没有任何类型
never用不存在的类型
数组类型
let arr:number[ ] = [1,2,3];
let arr:number[ ] = [1,’2’,3]; // error
let arr:string[ ] = [‘1’,’2’,’3’];
let arr:[number,string] = [1,’cyp’];
let arr:[number,string] = [1,’string’,true] //error
函数类型
function todo(x:number, y:number):number{ return x+y }; todo(1,2);
可选参数-?(可选参数要放在函数入参的最后面,不然会导致编译错误):
function todo(x:number, y:number, z?:number):number{ return x+y }; todo(1,2); todo(1,2,3);
Comments | 1 条评论
博主 程啊
`(“▔□▔)/`