这部分主要对Vue3.0的新增API以及特性进行整理
<script type="module" src="/src/main.ts"></script>
<script type="text/javascript"></script>
传统script标签的代码加载容易导致全局作用域污染,而且要维系一系列script的书写顺序,项目一大,维护起来越来越困难。ES module 通过声明式的暴露和引用模块使得各个模块之间的依赖变得明显。使得项目在维护上更加方便容易。
<teleport to="#modal">
<div id="center">
<h2>自定义组件</h2>
</div>
</teleport>
<body>
<div id="app"></div>
<div id="modal"></div>
<script type="module" src="/src/main.ts"></script>
</body>
//img子组件
<template>
<img :src="result && result.imgUrl" />
</template>
<script lang="ts">
import axios from 'axios'
import { defineComponent } from 'vue'
export default defineComponent({
async setup() {
const rawData = await axios.get('请求地址')
return {result:rawData.data}
}
})
//父组件
import ImgBox from "./components/ImgBox.vue";
<template>
<div>
<Suspense>
<template #default>
<Img-box />
</template>
<template #fallback>
<h1>Loading...</h1>
</template>
</Suspense>
</div>
</template>
</script>
这部分主要对Vue3.0与Vue2.0的差异进行比对
下面是一个更加直观的对比:
Vue2--------------vue3
beforeCreate -> setup()
created -> setup()
beforeMount -> onBeforeMount
mounted -> onMounted
beforeUpdate -> onBeforeUpdate
updated -> onUpdated
beforeDestroy -> onBeforeUnmount
destroyed -> onUnmounted
activated -> onActivated
deactivated -> onDeactivated
errorCaptured -> onErrorCaptured
大家都知道Vue2中响应式的数据只需要定义在data函数中然后return就行,在Vue3.0 中依旧可以采用这种方式来进行,但是Vue3.0 中引入的setup函数可以完全替代之前旧版本的data、methods 等等。下面就是一个setup 函数:
<template>
<tabbarCom :active="active" />
</template>
setup(props,ctx) {
const data = reactive({
active: 0,
taskList: [],
getData: () => {
getsopList({})
.then((result: any) => {
data.taskList = result;
})
.catch((err) => {});
},
});
onMounted(() => {
data.getData();
});
const refData = toRefs(data);
return { ...refData };
},
Vue2中也有watch-监听器(侦听器),作用是用来侦测响应式数据的变化,并且可以得到newValue新值和oldValue老值。如果你熟悉Vue2一定熟悉这个函数,但在Vue3中watch有了一些细微的变化。
//2.0
watch: {
list(old, newVal) {
this.page = 1;
},
},
//3.0
import {... , watch} from "vue"
//watch 函数需要写在setup中
//overText为你要监听的变量
watch(overText, (newValue, oldValue) => {
});
//同时监听多个变量
watch([overText, overText1], (newValue, oldValue) => {
console.log(`new--->${newValue}`);
console.log(`old--->${oldValue}`);
console.log(newValue[0]); //返回的newValue也是一个数组
});
Vue2.0中emit 抛出的时候可以直接通过this.$emit 调用,但是在3.0x中我们需要先对抛出的函数在emits中进行声明,然后才能在函数中调用。案例如下:
emits: ["linkto"]
setup(props: any, ctx: any) {
const data = reactive({
linkTo: (item: any) => {
ctx.emit("linkto", item.externalUserid);
},
const refsData = toRefs(data);
return { ...refsData };
//无参数
const filterMsg =computed( () => msg.value + "fdfasdf")
//有参数
const filterMsg2 =computed(() => {
return function(num) {
return msg.value + num
}
})