1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Vue3 中可以幫助你早點下班的 9 個開發(fā)技巧!

        共 6136字,需瀏覽 13分鐘

         ·

        2022-04-29 05:47

        vue3也發(fā)布很長時候了,官方也將默認(rèn)版本切換為vue3,而且也出現(xiàn)了完善的中文文檔[1],不知同志們是否已經(jīng)使用了了呢?

        本渣體驗了一段時間,還是相當(dāng)?shù)慕z滑,些許開發(fā)經(jīng)驗奉上,望大家能早點下班

        也可以看下 源碼解析github vue-next-analysis[2](未完待續(xù)持續(xù)更新中....)

        善用h(createVNode)和render 函數(shù)

        我們知道在vue3中導(dǎo)出了一個神奇的createVNode 函數(shù) 當(dāng)前函數(shù)它能創(chuàng)建一個vdom,大家不要小看vdom, 我們好好利用它,就能做出意想不到的效果比如我們要實現(xiàn)一個彈窗組件

        我們通常的思路是寫一個組件在項目中引用進來,通過v-model來控制他的顯示隱藏,但是這樣有個問題,我們復(fù)用的時候的成本需要復(fù)制粘貼。我們沒有辦法來提高效率,比如封裝成npm 通過調(diào)用js來使用。

        然而,有了 createVNode 和render 之后所有問題就迎刃而解了

        //?我們先寫一個彈窗組件
        ????????const?message?=?{
        ????????????setup()?{
        ????????????????const?num?=?ref(1)
        ????????????????return?{
        ????????????????????num
        ????????????????}
        ????????????},
        ????????????template:?`

        ????????????????????????
        {{num}}

        ????????????????????????
        這是一個彈窗

        ??????????????????????
        `
        ????????}
        復(fù)制代碼
        ??//?初始化組件生成vdom
        ??const?vm?=?createVNode(message)
        ??//?創(chuàng)建容器,也可以用已經(jīng)存在的
        ??const?container?=?document.createElement('div')
        ??//render通過patch?變成dom
        ??render(vm,?container)
        //?彈窗掛到任何你想去的地方??
        document.body.appendChild(container.firstElementChild)
        復(fù)制代碼

        經(jīng)過上面這一通騷操作,我們發(fā)現(xiàn)我們可以將他封裝為一個方法,放到任何想放的地方。

        善用JSX/TSX

        文檔上說了,在絕大多數(shù)情況下,Vue 推薦使用模板語法來搭建 HTML。然而在某些使用場景下,我們真的需要用到 JavaScript 完全的編程能力。這時渲染函數(shù)就派上用場了。

        jsx和模板語法的優(yōu)勢對比

        jsx和模板語法都是vue 支持的的書寫范疇,然后他們確有不同的使用場景,和方式,需要我們根據(jù)當(dāng)前組件的實際情況,來酌情使用

        什么是JSX

        JSX 是一種 Javascript 的語法擴展,JSX = Javascript + XML,即在 Javascript 里面寫 XML,因為 JSX 的這個特性,所以他即具備了 Javascript 的靈活性,同時又兼具 html 的語義化和直觀性。

        模板語法的優(yōu)勢

        • 1、模板語法書寫起來不怎么違和,我們就像在寫html一樣
        • 2、在vue3中由于模板的可遍歷性,它能在編譯階段做更多優(yōu)化,比如靜態(tài)標(biāo)記、塊block、緩存事件處理程序等
        • 3、模板代碼邏輯代碼嚴(yán)格分開,可讀性高
        • 4、對JS功底不那么好的人,記幾個命令就能快速開發(fā),上手簡單
        • 5、vue官方插件的完美支持,代碼格式化,語法高亮等

        JSX的優(yōu)勢

        • 1、靈活、靈活、靈活(重要的事情說三遍)
          復(fù)制代碼
        • 2、一個文件能寫好多個組件
          復(fù)制代碼
        • 3、只要JS功底好,就不用記憶那么多命令,上來就是一通輸出
          復(fù)制代碼
        • 4、JS和JSX混用,方法即聲明即用,對于懂行的人來說邏輯清晰
          復(fù)制代碼

        對比

        由于vue對于JSX的支持,社區(qū)里,也是爭論來爭論去,到底要分個高低,然后本渣認(rèn)為,他倆本來沒有高低,您覺得哪個適合,就用哪個即可,缺點放在對的地方他就是優(yōu)勢 要發(fā)揚咱們老前輩們傳下來的中庸之道,做集大成者,將兩者結(jié)合使用,就能發(fā)揮無敵功效,亂軍之中博老板青睞。

        接下來說一下本人的一點粗淺理解,我們知道組件類型,分為容器型組件和展示展示型組件 在一般情況下,容器型組件,他由于可能要對于當(dāng)前展示型組件做一個標(biāo)準(zhǔn)化或者宰包裝,那么此時容器型組件中用JSX就再好不過

        舉個例子:現(xiàn)在有個需求,我們有兩個按鈕,現(xiàn)在要做一個通過后臺數(shù)據(jù)來選擇展示哪一個按鈕,我們通常的做法,是通過在一個模板中通過v-if去控制不同的組件

        然而有了JSX與函數(shù)式組件之后,我們發(fā)現(xiàn)邏輯更清晰了,代碼更簡潔了,質(zhì)量更高了,也更裝X了

        我們來看

        先整兩個組件

        //btn1.vue