2021-07-17 Vue 3.0新特性

  1. vite
    vite 是一個(gè)基于 Vue3 單文件組件的非打包開發(fā)服務(wù)器悄晃,它做到了本地快速開發(fā)啟動(dòng)靡菇。
    創(chuàng)建一個(gè)vue的項(xiàng)目可以用vite創(chuàng)建
npm init vite-app <project-name>
cd <project-name>
npm install 
npm run dev
//或者
yarn create vite-app <project-name>
cd <project-name>
yarn 
yarn dev

(1)快速的冷啟動(dòng)便斥,不需要等待打包操作饶火;
(2)即時(shí)的熱模塊更新鹏控,替換性能和模塊數(shù)量的解耦讓更新飛起;
(3)真正的按需編譯肤寝,不再等待整個(gè)應(yīng)用編譯完成当辐,這是一個(gè)巨大的改變。

  1. Composition API
    Composition API字面意思是組合API鲤看,它是為了實(shí)現(xiàn)基于函數(shù)的邏輯復(fù)用機(jī)制而產(chǎn)生的
    基本使用
 setup() {
            //setup 函數(shù)是一個(gè)新的組件選項(xiàng)缘揪。作為在組件內(nèi)使用 Composition API 的入口點(diǎn)
            //此函數(shù)沒(méi)有created和beforeCreated
            //與counter相關(guān)的
            const {counter, doubleCounter} = useCounter()

            //單值響應(yīng)式  ref: 接受一個(gè)參數(shù)值并返回一個(gè)響應(yīng)式且可改變的 ref 對(duì)象。ref 對(duì)象擁有一個(gè)指向內(nèi)部值的單一屬性 .value。
            const msg1 = ref('我是單值 message')
            const modalOpen = ref(false)
            return {counter, doubleCounter, msg1, modalOpen}
        },

function useCounter() {
        //多值響應(yīng)式    reactive: 接收一個(gè)普通對(duì)象然后返回該普通對(duì)象的響應(yīng)式代理寺晌。等同于 2.x 的 Vue.observable()
        const data = reactive({
            counter: 1,
            doubleCounter: computed(() => data.counter * 2)
        })
        let timer;
        onMounted(() => {
            timer = setInterval(() => {
                data.counter++
            }, 1000)
        })
        onUnmounted(() => {
            clearInterval(timer)
        })
// toRefs 是針對(duì)整個(gè)對(duì)象的所有屬性世吨,目標(biāo)在于將響應(yīng)式對(duì)象( reactive 封裝)轉(zhuǎn)換為普通對(duì)象
        return toRefs(data)
    }
  1. teleport
    Teleport 是一種能夠?qū)⑽覀兊哪0逡苿?dòng)到 DOM 中 Vue app 之外的其他位置的技術(shù),就有點(diǎn)像哆啦A夢(mèng)的“任意門”

場(chǎng)景:像 modals,toast 等這樣的元素呻征,很多情況下耘婚,我們將它完全的和我們的 Vue 應(yīng)用的 DOM 完全剝離,管理起來(lái)反而會(huì)方便容易很多陆赋,原因在于如果我們嵌套在 Vue 的某個(gè)組件內(nèi)部沐祷,那么處理嵌套組件的定位、z-index 和樣式就會(huì)變得很困難攒岛。

<template>
    <!-- to 屬性就是目標(biāo)位置 -->
    <teleport to="body">
        <div v-if="modalOpen" class="modal">
            <div> 這是一個(gè)模態(tài)窗口! 我的父元素是"body"!
                <button @click="changeModel()">Close</button>
            </div>
        </div>
    </teleport>
</template>

4 .fragments
一個(gè) Vue 模板可以有多個(gè)根節(jié)點(diǎn), 3.0之前一個(gè)vue模板只有一個(gè)根節(jié)點(diǎn)

<template>
    <div>fragment1</div>
    <div>fragment2</div>
    <div>fragment3</div>
</template>

5.Emits
Vue官方建議我們?cè)诮M件中所有的emit事件都能在組件的emits選項(xiàng)中聲明
emits參數(shù)有倆種形式對(duì)象和數(shù)組赖临,對(duì)象里面可以配置帶校驗(yàn)emit事件,為null的時(shí)候代表不校驗(yàn)灾锯,校驗(yàn)的時(shí)候兢榨,會(huì)把emit事件的參數(shù)傳到校驗(yàn)函數(shù)的參數(shù)里面
當(dāng)校驗(yàn)函數(shù)不通過(guò)的時(shí)候,控制臺(tái)會(huì)輸出一個(gè)警告顺饮,但是emit事件會(huì)繼續(xù)執(zhí)行

<template>
    <button @click="handleClick">點(diǎn)擊emit-不校驗(yàn)事件</button>
    <button @click="handleOpen">點(diǎn)擊emit-校驗(yàn)事件</button>
</template>

<script>

    export default {
        props: {

        },
        //emits 寫自定義事件  作用 比較清晰知道該組件有那些自定義事件
        emits: {
            click: null,//click事件沒(méi)有檢驗(yàn)
            open: (value) => {
                if (typeof value === "string") {
                    return true;
                } else {
                    return false;
                }
            },
        },
        created(){

        },
        data() {
            return {

            }
        },
        methods:{
            handleClick(){
                this.$emit("click");
            },
            handleOpen(){
                this.$emit("open", 1);
            },
        }
    };
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孤紧,一起剝皮案震驚了整個(gè)濱河市染突,隨后出現(xiàn)的幾起案子拭抬,更是在濱河造成了極大的恐慌占业,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赦肋,死亡現(xiàn)場(chǎng)離奇詭異块攒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)佃乘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門囱井,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人趣避,你說(shuō)我怎么就攤上這事庞呕。” “怎么了鹅巍?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵千扶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我骆捧,道長(zhǎng)澎羞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任敛苇,我火速辦了婚禮妆绞,結(jié)果婚禮上顺呕,老公的妹妹穿的比我還像新娘。我一直安慰自己括饶,他們只是感情好株茶,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著图焰,像睡著了一般启盛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上技羔,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天僵闯,我揣著相機(jī)與錄音,去河邊找鬼藤滥。 笑死鳖粟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拙绊。 我是一名探鬼主播向图,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼标沪!你這毒婦竟也來(lái)了榄攀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谨娜,失蹤者是張志新(化名)和其女友劉穎航攒,沒(méi)想到半個(gè)月后磺陡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趴梢,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年币他,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坞靶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝴悉,死狀恐怖彰阴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拍冠,我是刑警寧澤尿这,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站庆杜,受9級(jí)特大地震影響射众,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晃财,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一叨橱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦罗洗、人聲如沸愉舔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)轩缤。三九已至,卻和暖如春贩绕,著一層夾襖步出監(jiān)牢的瞬間典奉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工丧叽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卫玖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓踊淳,卻偏偏與公主長(zhǎng)得像假瞬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子迂尝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容