This extension adds Vue3 Code Snippets into Visual Studio Code.html
這個插件基於最新的 Vue3 的 API 添加了 Code Snippets。vue
Including most of the API of Vue3. You can type reactive
, choose reactive
, and press ENTER, then const data = reactive({...})
appear on the screen.react
插件的 Snippets 以下表格所示,好比你能夠鍵入 reactive
而後按上下鍵選中 reactive
再按 Enter 鍵,就輸入了const data = reactive({...})
了。git
Prefix | JavaScript Snippet Content |
---|---|
import |
import {...} from "@vue/composition-api" |
import |
import {...} from 'vue' |
newVue |
newVue({...}) |
createComponent |
createComponent({...}) |
export |
export default { ... } |
setup |
setup(${...}) {...} |
reactive |
const data = reactive({...}) |
watch |
watch(..., ...) |
watchFn |
watch(() => {...}) |
computed |
computed(() => { get: () => {...}, set: () => {...}}) |
toRefs |
toRefs(...) |
ref |
ref(...) |
props |
props(...) |
onBeforeMount |
onBeforeMount(...) |
onMounted |
onMounted(...) |
onBeforeUpdate |
onBeforeUpdate(...) |
onUpdated |
onUpdated(...) |
onBeforeUnmount |
onBeforeUnmount(...) |
onUnmounted |
onUnmounted(...) |
onErrorCaptured |
onErrorCaptured(...) |
Vue Composition APIgithub
@vue/composition-api
使開發者們能夠在 Vue 2.x
中使用 Vue 3.0
引入的基於函數的邏輯複用機制。vue-cli
English Versiontypescript
npmnpm
npm install @vue/composition-api --save
yarnvisual-studio-code
yarn add @vue/composition-api
CDNapi
<script src="https://unpkg.com/@vue/composition-api/dist/vue-composition-api.umd.js"></script>
By using the global variable window.vueCompositionApi.
經過全局變量 window.vueCompositionApi
來使用。
You must install @vue/composition-api via Vue.use() before using other APIs:
在使用任何 @vue/composition-api
提供的能力前,必須先經過 Vue.use()
進行安裝:
import Vue from 'vue'; import VueCompositionApi from '@vue/composition-api'; Vue.use(VueCompositionApi);
After installing the plugin you can use the Composition API to compose your component.
安裝插件後,您就能夠使用新的 Composition API 來開發組件了。
This plugin requires TypeScript version >3.5.1. If you are using vetur
, make sure to set vetur.useWorkspaceDependencies
to true
.
To let TypeScript properly infer types inside Vue component options, you need to define components with createComponent
:
請使用最新版的 TypeScript,若是你使用了 vetur
,請將 vetur.useWorkspaceDependencies
設爲 true
。
爲了讓 TypeScript 正確的推導類型,咱們必須使用 createComponent
來定義組件:
import { createComponent } from '@vue/composition-api'; const Component = createComponent({ // 啓用類型推斷 }); const Component = { // 沒法進行選項的類型推斷 // TypeScript 沒法知道這是一個 Vue 組件的選項對象 };
🚀 An Example Repository with TS and TSX support is provided to help you start.
To support TSX, create a declaration file with following content in your project.
🚀 這裏有一個配置好 TS/TSX 支持的示例倉庫來幫助你快速開始.
要支持 TSX,請建立一個類型定義文件並提供正確的 JSX 定義。內容以下:
// file: shim-tsx.d.ts` import Vue, { VNode } from 'vue'; import { ComponentRenderProxy } from '@vue/composition-api'; declare global { namespace JSX { // tslint:disable no-empty-interface interface Element extends VNode {} // tslint:disable no-empty-interface interface ElementClass extends ComponentRenderProxy {} interface ElementAttributesProperty { $props: any; // specify the property name to use } interface IntrinsicElements { [elem: string]: any; } } }
Ref
UnwrapUnwrap
is not working with Array index.
數組索引屬性沒法進行自動的Unwrap
:
ref
as a direct child of Array
:Array
直接存取 ref
對象:const state = reactive({ list: [ref(0)], }); // no unwrap, `.value` is required state.list[0].value === 0; // true state.list.push(ref(1)); // no unwrap, `.value` is required state.list[1].value === 1; // true
ref
in a plain object when working with Array
:ref
的普通對象:const a = { count: ref(0), }; const b = reactive({ list: [a], // a.count will not unwrap!! }); // no unwrap for `count`, `.value` is required b.list[0].count.value === 0; // true
const b = reactive({ list: [ { count: ref(0), // no unwrap!! }, ], }); // no unwrap for `count`, `.value` is required b.list[0].count.value === 0; // true
ref
in a reactive
when working with Array:ref
存放到 reactive
對象中:const a = reactive({ count: ref(0), }); const b = reactive({ list: [a], }); // unwrapped b.list[0].count === 0; // true b.list.push( reactive({ count: ref(1), }) ); // unwrapped b.list[1].count === 1; // true
reactive
will mutate the origin objectreactive
會返回一個修改過的原始的對象This is an limitation of using Vue.observable
in Vue 2.
此行爲與 Vue 2 中的 Vue.observable
一致
Vue 3 will return an new proxy object.
Vue 3 中會返回一個新的的代理對象.
watch()
APIonTrack
and onTrigger
are not available in WatchOptions.
不支持 onTrack
和 onTrigger
選項。
✅ Support ❌ Not Supported
✅ String ref && return it from setup()
:
<template> <div ref="root"></div> </template> <script> export default { setup() { const root = ref(null); onMounted(() => { // the DOM element will be assigned to the ref after initial render console.log(root.value); // <div/> }); return { root, }; }, }; </script>
✅ String ref && return it from setup()
&& Render Function / JSX:
export default { setup() { const root = ref(null); onMounted(() => { // the DOM element will be assigned to the ref after initial render console.log(root.value); // <div/> }); return { root, }; }, render() { // with JSX return () => <div ref="root" />; }, };
❌ Function ref:
<template> <div :ref="el => root = el"></div> </template> <script> export default { setup() { const root = ref(null); return { root, }; }, }; </script>
❌ Render Function / JSX in setup()
:
export default { setup() { const root = ref(null); return () => h('div', { ref: root, }); // with JSX return () => <div ref={root} />; }, };
If you really want to use template refs in this case, you can access vm.$refs
via SetupContext.refs
.
若是你依然選擇在 setup()
中寫 render
函數,那麼你能夠使用 SetupContext.refs
來訪問模板引用,它等價於 Vue 2.x 中的 this.$refs
:
⚠️ Warning: The
SetupContext.refs
won't exist inVue 3.0
.@vue/composition-api
provide it as a workaround here.
⚠️ 警告:
SetupContext.refs
並不屬於Vue 3.0
的一部分,@vue/composition-api
將其曝光在SetupContext
中只是臨時提供一種變通方案。
export default { setup(initProps, setupContext) { const refs = setupContext.refs; onMounted(() => { // the DOM element will be assigned to the ref after initial render console.log(refs.root); // <div/> }); return () => h('div', { ref: 'root', }); // with JSX return () => <div ref="root" />; }, };
You may also need to augment the SetupContext
when working with TypeScript:
若是項目使用了 TypeScript,你還須要擴展 SetupContext
類型:
import Vue from 'vue'; import VueCompositionApi from '@vue/composition-api'; Vue.use(VueCompositionApi); declare module '@vue/composition-api/dist/component/component' { interface SetupContext { readonly refs: { [key: string]: Vue | Element | Vue[] | Element[] }; } }
Even if there is no definitive Vue 3 API for SSR yet, this plugin implements the onServerPrefetch lifecycle hook that allows you to use the serverPrefetch hook found in the classic API.
import { onServerPrefetch } from '@vue/composition-api'; export default { setup (props, { ssrContext }) { const result = ref(); onServerPrefetch(async () => { result.value = await callApi(ssrContext.someId); }); return { result, }; }, };
若是文章和筆記能帶您一絲幫助或者啓發,請不要吝嗇你的贊和 Star,你的確定是我前進的最大動力😁