【一週連擊之Vue】第一天-漸進式框架初印象

Vue是什麼

引用官方的一段話

Vue (讀音 /vjuː/,類似於 view) 是一套用於構建用戶界面的漸進式框架。與其它大型框架不同的是,Vue 被設計爲可以自底向上逐層應用。Vue 的核心庫只關注視圖層,不僅易於上手,還便於與第三方庫或既有項目整合。另一方面,當與現代化的工具鏈以及各種支持類庫結合使用時,Vue 也完全能夠爲複雜的單頁應用提供驅動。

什麼是漸進式

引用一個知乎的回答

在我看來,漸進式代表的含義是:主張最少。
每個框架都不可避免會有自己的一些特點,從而會對使用者有一定的要求,這些要求就是主張,主張有強有弱,它的強勢程度會影響在業務開發中的使用方式。

比如說,Angular,它兩個版本都是強主張的,如果你用它,必須接受以下東西:

  • 必須使用它的模塊機制
  • 必須使用它的依賴注入
  • 必須使用它的特殊形式定義組件(這一點每個視圖框架都有,難以避免)

所以Angular是帶有比較強的排它性的,如果你的應用不是從頭開始,而是要不斷考慮是否跟其他東西集成,這些主張會帶來一些困擾。
比如React,它也有一定程度的主張,它的主張主要是函數式編程的理念,比如說,你需要知道什麼是副作用,什麼是純函數,如何隔離副作用。它的侵入性看似沒有Angular那麼強,主要因爲它是軟性侵入。
你當然可以只用React的視圖層,但幾乎沒有人這麼用,爲什麼呢,因爲你用了它,就會覺得其他東西都很彆扭,於是你要引入Flux,Redux,Mobx之中的一個,於是你除了Redux,還要看saga,於是你要糾結業務開發過程中每個東西有沒有副作用,純不純,甚至你連這個都可能不能忍:

const getData = () => {
// 如果不存在,就在緩存中創建一個並返回
// 如果存在,就從緩存中拿
}

因爲你要糾結它有外部依賴,同樣是不加參數調用,連續兩次的結果是不一樣的,於是不純。

現在我要說說爲什麼我這麼支持Vue了,沒什麼,可能有些方面是不如React,不如Angular,但它是漸進的,沒有強主張,你可以在原有大系統的上面,把一兩個組件改用它實現,當jQuery用;也可以整個用它全家桶開發,當Angular用;還可以用它的視圖,搭配你自己設計的整個下層用。你可以在底層數據邏輯的地方用OO和設計模式的那套理念,也可以函數式,都可以,它只是個輕量視圖而已,只做了自己該做的事,沒有做不該做的事,僅此而已。漸進式的含義,我的理解是:沒有多做職責之外的事。

另外,還有一篇較早期的InfoQ文章寫的也非常不錯:《Vue 2.0——漸進式前端解決方案》

最簡單的使用方式

想使用vue很簡單,寫一個index.html,然後引入vue.js便可以使用了,真的是零門檻起步,最簡單的示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

<body>
    <div id="app1">
        {{ message }}
    </div>
    <script>
        var app1 = new Vue({
            el: '#app1',
            data: {
                message: 'Hello Vue!'
            }
        })
    </script>
</body>
</html>

這裏vue用起來感覺跟模板引擎差不多,實際上,據說vue在插值處理上就是使用了Mustache模板引擎。當然這是最簡單的起步示例,工程化的項目是不建議這樣直接在頁面上寫的,而是要組件化模塊化,而這也正體現了vue的漸進式,隨手便可以用起來,不需要過多的操作和配置(跟之前接觸angular的時候比真是太容易了)。

這段代碼有一點需要注意的便是順序,body內的script腳本必須在div的下方

通過Demo接觸到的一些功能

  • {{ }}方式插值
  • 通過v-bindv-ifv-forv-on等指令的使用,來控制dom的屬性、結構和交互
  • 通過使用v-model來實現雙向綁定

    這裏遇到個問題,按照官方的例子,v-model似乎是綁定到了dom元素的value屬性上,那對於selectcheckbox這樣的元素呢?一番探索後還是在官網找到了解釋:
    v-model 在內部爲不同的輸入元素使用不同的屬性並拋出不同的事件:

    • text 和 textarea 元素使用 value 屬性和 input 事件;
    • checkbox 和 radio 使用 checked 屬性和 change 事件;
    • select 字段將 value 作爲 prop 並將 change 作爲事件。
  • vue組件,組件也是一個vue實例,有兩個屬性可定義:templateprops,vue組件是支持嵌套的

總結

OK,簡單的上手,大概的熟悉了一些基礎的概念,初印象還不錯,一直聽說很輕很容易上手,今日看來,確實所言非虛(雖然是刻意沒有使用vue-cli來操作),下次深入去了解Vue實例的概念。

發佈了28 篇原創文章 · 獲贊 16 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章