最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3中defineEmits、defineProps?不用引入便直接用

 更新時間:2022年09月20日 10:29:44   作者:碼農小宋???????  
這篇文章主要介紹了Vue3中defineEmits、defineProps?不用引入便直接用,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

前言:

最近正在將一個使用單文件組件的 Options API 的 Vue2 JavaScript 項目升級為 Vue3 typescript,并利用 Composition API 的優(yōu)勢。

比如,下面這種 選項API 方式:

export default {
props: {
name: {
type: String,
required: true.
}
},
emits: ['someEvent', 'increaseBy']
};

我們將它轉成 組合API 方式:

const props = defineProps<{
name: string;
}>();
const emit = defineEmits<{
(event: 'someEvent): void;
(event: 'increaseBy', value: number): void;
}>();

從 選項API 的 ??emit?? 和 ??props?? 到 組合API 的 ??defineemit?? 和 ??defineProps?? 函數的基于類型語法的轉換并不簡單。我也很好奇 Vue 是如何處理接口的。

TypeScript 接口是只在設計和編譯時存在的結構。它們在JavaScript運行時之前被過濾掉,那么它們是如何影響組件的行為的呢?

我想知道是否有辦法看到Vue如何解釋傳遞給 ??defineEmits?? 和 ??defineProps?? 的通用參數。如果你注意到文檔中說你不需要導入 ??defineEmits?? 和 ??defineProps?? 函數。這是因為它們實際上是同名的JavaScript函數的宏。在進行完整的 TypeScript 傳遞之前,Vue webpack插件使用TypeScript的 AST(抽象語法樹)來推導JavaScript版本的函數選項。

如果不是因為宏:

defineProps<{
prop1: string;
prop2: number;
}>();

就會變成:

defineProps();

這樣就會導致參數缺失的錯誤。

如果看一下Vue的 SFC(單文件組件)編譯器源代碼,有一個叫做 compileScript 的函數。我開始嘗試用最少的參數來調用這個函數,這樣就不會出錯,并模擬任何不重要的必要參數。最終發(fā)現了另一個叫 parse 的函數。這給了我所需的大部分參數,只剩下要mock的組件 ??id??。

這里有一個小腳本,它接收SFC的 ??.vue??文件并輸出 Vue 如何解釋 TypeScript。

import { readFile, writeFile } from "fs";
import parseArgs from "minimist";
import { parse, compileScript } from "@vue/compiler-sfc";
const { file, out } = parseArgs(process.argv.slice(2), {
string: ["file", "out"],
alias: {
file: "f",
out: "o"
}
});
const filename = file;
const mockId = "xxxxxxxx";
readFile(filename, "utf8", (err, data) => {
const { descriptor } = parse(data, {
filename
});
const { content } = compileScript(descriptor, {
inlineTemplate: true,
templateOptions: {
filename
},
id: mockId
});
if (out) {
writeFile(out, "utf8", content);
} else {
process.stdout.write(content);
}
});

事例地址:https://stackblitz.com/edit/node-fzuykn?file=index.js

例如,有如以下組件:

interface Bar {
prop1: string;
prop2: number;
}

defineProps<{
bar: Bar;
bars: Bar[];
asdf1?: boolean;
asdf2: string[];
}>();

輸出:

interface Bar {
prop1: string;
prop2: number;
}
export default /*#__PURE__*/_defineComponent({
__name: 'demo',
props: {
bar: { type: Object, required: true },
bars: { type: Array, required: true },
asdf1: { type: Boolean, required: false },
asdf2: { type: Array, required: true }
},
setup(__props: any) {
return (_ctx: any,_cache: any) => {
return (_openBlock(), _createElementBlock("div"))
}
}

正如上面所看到的,SFC編譯器采用TypeScript類型信息,并建立了 ??props?? 對象。原始類型是一對一的。接口變成對象,而 ????? 可選語法驅動 ??required?? 的屬性。

到此這篇關于Vue3中defineEmits、defineProps 不用引入便直接用的文章就介紹到這了,更多相關Vue3 defineEmit 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue性能優(yōu)化之cdn引入vue-Router的問題

    vue性能優(yōu)化之cdn引入vue-Router的問題

    這篇文章主要介紹了vue性能優(yōu)化之cdn引入vue-Router的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • v-distpicker地區(qū)選擇器組件使用實例詳解

    v-distpicker地區(qū)選擇器組件使用實例詳解

    代碼添加了一個vDistpickerHandle的事件處理函數對地區(qū)選擇器中的數據進行處理,將數據存儲到form對象的相應屬性中,方便數據提交,這篇文章主要介紹了v-distpicker地區(qū)選擇器組件使用,需要的朋友可以參考下
    2024-02-02
  • Vue.js實現watch屬性的示例詳解

    Vue.js實現watch屬性的示例詳解

    本文討論了watch函數是如何利用副作用函數和options進行封裝實現的,也通過調度函數去控制回調函數的立即執(zhí)行和執(zhí)行時機,還可以解決競態(tài)問題,感興趣的可以了解一下
    2022-04-04
  • 詳解基于vue-router的動態(tài)權限控制實現方案

    詳解基于vue-router的動態(tài)權限控制實現方案

    本篇文章主要介紹了詳解基于vue-router的動態(tài)權限實現方案,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Vue實現簡單搜索功能的示例代碼

    Vue實現簡單搜索功能的示例代碼

    在vue項目中,搜索功能是我們經常需要使用的一個場景,最常用的是在列表數據中搜索一個想要的,今天的例子就是我們實現vue從列表數據中搜索,希望對大家有所幫助
    2023-03-03
  • vue子組件改變父組件傳遞的prop值通過sync實現數據雙向綁定(DEMO)

    vue子組件改變父組件傳遞的prop值通過sync實現數據雙向綁定(DEMO)

    本文通過一個demo給大家介紹了vue子組件改變父組件傳遞的prop值通過sync實現數據雙向綁定,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Vue之beforeEach非登錄不能訪問的實現(代碼親測)

    Vue之beforeEach非登錄不能訪問的實現(代碼親測)

    這篇文章主要介紹了Vue之beforeEach非登錄不能訪問的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • vue2 d3實現企查查股權穿透圖股權結構圖效果詳解

    vue2 d3實現企查查股權穿透圖股權結構圖效果詳解

    這篇文章主要為大家介紹了vue2 d3實現企查查股權穿透圖股權結構圖效果詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • vue 如何使用遞歸組件

    vue 如何使用遞歸組件

    這篇文章主要介紹了vue 如何使用遞歸組件,幫助大家更好的理解和使用vue,完成開發(fā)需求,感興趣的朋友可以了解下
    2020-10-10
  • vue3整合SpringSecurity加JWT實現登錄認證

    vue3整合SpringSecurity加JWT實現登錄認證

    本文主要介紹了vue3整合SpringSecurity加JWT實現登錄認證,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04

最新評論

利辛县| 刚察县| 轮台县| 舟曲县| 邵阳县| 汕尾市| 丹巴县| 南靖县| 荔浦县| 玉环县| 广河县| 荆州市| 龙里县| 铜川市| 曲松县| 那曲县| 绥江县| 玉溪市| 临夏市| 运城市| 建宁县| 红安县| 封开县| 平阴县| 象山县| 保德县| 溆浦县| 兖州市| 武邑县| 鹰潭市| 塘沽区| 渝北区| 吉林省| 察隅县| 临沂市| 马龙县| 中宁县| 黄石市| 白沙| 邓州市| 恭城|