一、vue3.0是什么
Vue3.0又稱為vue-next,主要3個特點:響應式、模板、對象式的組件聲明方式,進行了全面的更改,底層實習和上層的api都有了明顯的變化,基於Proxy重新實現了響應式,基於treeshaking內置了更多的功能,提供了類式的組件聲明方式。
具體:https://www.jianshu.com/p/1e09e244bdc3
二、vue3.0最新進展 、Composition API使用
vue 官方發布了最新的3.0api修改草案,並在充分采納社區的意見后,將vue Function API 更正為Vue Composition API,也提供了Vue3.0特性的嘗鮮版本,在Vue2.x能夠提前體驗此API的庫@vue/composition-api
詳見:https://vue-composition-api-rfc.netlify.com
項目中使用:
npm install @vue/composition-api --save
main.js
import VueComposition from "@vue/composition-api";
Vue.use(VueComposition);
三、vue3.0新特性語法
setup函數
setup函數是一個新的vue組件選項,是用於在組件中使用Composition API 的入口
export default { setup(props, context) { context.attrs, context.slots, context.parent, context.root, context.emit } };
Reactive (聲明單一對象時使用)
取得一個對象並返回原始對象的響應數據處理
import { reactive } from "@vue/composition-api"; export default { setup() { const obj = reactive({ count: 0 }); } };
ref(聲明基礎數據類型變量時使用)
內部值並返回一個響應性且可變的ref對象。ref對象具有.value指向內部值得單個屬性。
import { ref } from "@vue/composition-api"; export default { setup() { const obj = ref("sh3h"); console.log(obj.value); } };
IsRef和toRefs
檢出一個對象是否是ref對象:
import { isRef, toRefs, reactive } from "@vue/composition-api"; export default { setup() { const foo = "sh3h"; const unwrapped = isRef(foo) ? foo.value : foo; console.log(unwrapped); function useMousePosition() { const pos = reactive({ x: 0, y: 0 }); return toRefs(pos); } const { x, y } = useMousePosition(); console.log(x, y); } };
Watch 偵聽器
import { ref, watch } from "@vue/composition-api"; export default { setup() { const count = ref(100); watch( () => count.value, () => { console.log(count); } ); count.value = 200; //watch 被執行 } };
Computed
它可以使用具有get和set功能的對象來創建可寫的ref對象。
import { ref, computed } from "@vue/composition-api"; export default { setup() { const count = ref(1); const plusOne = computed({ get: () => count.value + 1, set: val => { count.value = val - 1; } }); plusOne.value = 1; console.log(count.value); // 0 } };
生命周期掛鈎
import { onMounted, onUpdated, onUnmounted } from "@vue/composition-api"; export default { setup() { onMounted(() => { console.log("mounted!"); }); onUpdated(() => { console.log("updated!"); }); onUnmounted(() => { console.log("unmounted!"); }); } };
2.x生命周期選項和Composition API之間的映射
beforeCreate ->使用 setup()
created ->使用 setup()
beforeMount -> onBeforeMount
mounted -> onMounted
beforeUpdate -> onBeforeUpdate
updated -> onUpdated
beforeDestroy -> onBeforeUnmount
destroyed -> onUnmounted
errorCaptured -> onErrorCaptured
新鈎子
除了2.x生命周期等效項之外,Composition API還提供了以下調試掛鈎:
onRenderTracked
onRenderTriggered
兩個鈎子都收到DebuggerEvent類似於onTrack和onTrigger觀察者的選項:
import { onRenderTriggered } from "@vue/composition-api"; export default { setup() { onRenderTriggered(e => { console.log(e); debugger; // inspect which dependency is causing the component to re-render }); } };