摘要:對于一個每秒幀的狀態改變,清楚的知道那些節點被影響,更新它們,而避免那些不受影響節點的更新。而臟檢查或差分,往往會觸發整個子樹的重新渲染。截至目前還未發現開放和可復現的。
原文地址:http://blog.evanyou.me/2015/1...
vuejs是一個建造web界面的庫。配合其他工具,你也可以稱它為“框架”(盡管它更多的看起來像是一堆配合很好的工具集)。如果你從未聽說過vue,你可能會想,好吧,我懂了,又一個js框架。事實上Vue并不新,因為我兩年以前就開始了它的原型開發,第一個正式版發布于2014年2月,隨后不斷更新進步,至今已經有很多產品在使用Vue。
那么,Vue到底是干嘛的呢?究竟什么造就了它的與眾不同?當這個地球上已經有了angular,ember和react,我為什么還要學習vue?通過帶你深入vuejs的設計概念,本篇文章希望能給你一些靈感, 我相信讀后你自會有自己的答案。
響應式保證數據和展現的一致很難,是嗎?
我們先從最基本的任務開始,展示數據,假設我們有如下一個簡單的對象
var object = { message: "Hello world!" }
模板:
{{ message }}
在Vue里面我們這樣將它們結合:
new Vue({ el: "#example", data: object })
看起來我們僅僅渲染了模板,當我們更新了數據,我們要如何去更新界面呢?什么都不用做,因為Vue已經把這個對象變成了響應式的,當你更改了object.message, html會自動更新。更重要的是,你無須擔心如果超時去調用$apply,或者setState(),監聽Store的事件,或者創建框架監聽屬性,比如ko.observable()或 Ember.Object.create(),vue就這樣簡單的運作。
Vue同時提供了一個完美的計算屬性(computed properties):
var example = new Vue({ data: { a: 1 }, computed: { b: function () { return this.a + 1 } } }) // both a & b are proxied on the created instance. example.a // -> 1 example.b // -> 2 example.a++ example.b // -> 3
計算屬性b追蹤a,自動同步,不需要聲明a為b的依賴。
另外,簡單類模式(POJO-based)允許很簡單的整合任意類型的數據資源或狀態管理方案,比如,這里有一個整合了vuejs組件和Rxjs的觀察模塊,僅僅用了30行代碼。
數據綁定對小型demo來說還不錯,那么大型應用呢?
對于結構復雜的界面,vue采用了與react十分類似的方案:從上至下的組件化。我們先來看一個可復用組件的例子:
var Example = Vue.extend({ template: "{{ message }}", data: function () { return { message: "Hello Vue.js!" } } }) // register it with the tagVue.component("example", Example)
現在我們就可以用這個組件在其他模版里,就如同一個自定義頁面元素:
一個組件包含另外一些組件,它們形成一個UI樹。為了保證它們之間的組合性,Vue組件同時包含如下內容:
定義如何從父級獲取數據,使用 props
發布自定義事件,以便在父級作用域中觸發它
組合父級引入內容,使用
這里不過多探討細節,感興趣請查看官網。
模塊化21世紀了,我們不應該把所有東西都放在全局作用域里
我們使用打包工具(Webpack, Browerify)以及 ES2015.每個組件都是一個模塊,Vue會自動把配置對象轉換到組件結構里,所以我們只需要在模塊里簡單的輸出如下內容:
// ComponentA.js export default { template: "{{ message }}", data () { return { message: "Hello Vue.js!" } } }
// App.js import ComponentA from "./ComponentA" export default { // use another component, in this scope only. // ComponentA maps to the tagcomponents: { ComponentA }, template: ` ` }Now I"m using another component.
看起來不錯是嗎?如果我們能講頁面的模版,樣式和js邏輯封裝到一個文件里會更好!尤其是他們本身還有各自的語法高亮。實用工具諸如 Webpack + vue-loader 或者 Browerify + vueify,我們可以這么做:
什么?我們是不是重新定義了web組件?但是css依舊是全局的。
是的,一定程度上我們重新定義了web組件,除了:
我們也可以進行css封裝,只需添加scoped屬性到標簽內,它甚至不會繼承到自己的子組件里。
每個Vue組件都會被壓縮到一個js模塊內,不許加任何墊片完美兼容至IE9以上,也可以將其添加到自定義元素里。
ES2015 默認被支持。
你可以使用任何預處理器(less, coffeScript ...) 在任意語言塊。
當使用Webpack + vue-loader 方案時,你可以引用webpack全部的強大功能,例如靜態資源加載和處理,因為Vue里(單文件組件)模版和樣式都是通過webpack的html-loader,css-loader來實現的,你可以通過組件URLS來加載模塊依賴。
很好,我們的組件就長這個樣子:
對了,我提到vue組件是熱加載的了嗎?
可以用Vue做炫酷的東西嗎?
Vue內置了過渡系統,目前已經有很多獲獎網站使用它們。
Vue相應系統內部對漸變性質的狀態改變有著非常好的支持,對于其他框架而言,這里有些混亂,比如采用臟檢查(dirty-checking) 或者 dom差分(Virtual Dom diffing)。對于一個每秒60幀的狀態改變,vue清楚的知道那些節點被影響,更新它們,而避免那些不受影響節點的更新。而臟檢查或dom差分,往往會觸發整個dom子樹的重新渲染。對于小項目而言這還行,但是比如大項目里每秒60真的改變效率就不行了,就算是可以接受,這些方案也消耗了系統過多的資源。查看這篇討論,搞明白react,vue對于動畫渲染方面的效率差異。
下面是Vue一個狀態漸變的例子:
http://codepen.io/yyx990803/p...
我想創建的是應用,路由在哪里?
和React一樣,Vue本身不提供路由,但是你可以通過Vue-router來使用路由。它提供了內置路由映射到內置組件的功能,并且提供了顆粒度很好的過場控制,以下例子:
import Vue from "vue" import VueRouter from "vue-router" import App from "./app.vue" import ViewA from "./view-a.vue" import ViewB from "./view-b.vue" Vue.use(VueRouter) const router = new VueRouter() router.map({ "/a": { component: ViewA }, "/b": { component: ViewB } }) router.start(App, "#app")
app.vue的模版
This is the layout that won"t change
項目中的實際應用,參照 HackerNews Clone ,基于Vuejs, vue-router, webpack 和 vue-loader。
穩定性Vue是個人項目?安全性如何?
是的,Vue是一個個人項目,如果你想找一個企業級技術支持團隊,那么Vue并不是。但,我們來看下數字,Vue自從0.11版本就保持著100%測試覆蓋率,而且肯定會繼續,github issues平均13小時內解決,目前已解決1400+ issues。截至目前還未發現開放和可復現的bug。
譯者:以下略去最后兩段,作者主要說了歷史版本,版本遷移,希望各位持續關注和支持以及相關資源。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80282.html
摘要:小弟在前端摸爬滾打一段時間,發現前端的比較好的文檔比較分散,特別是中文的,我平時都是收藏在瀏覽器里,以后有好的教程和綜合性的文檔我會更新到這里。小組中文文檔,很全。 小弟在前端摸爬滾打一段時間,發現前端的比較好的文檔比較分散,特別是中文的,我平時都是ctrl+D收藏在瀏覽器里,以后有好的教程和綜合性的文檔我會更新到這里。一則可以做個記錄,防止丟失。二則有需要的朋友可以來我這里找一找。 ...
摘要:上圖是二月份前端框架排名,位居第一,排名第三。我們認為前端模板和組件代碼是緊密相連的。直到最近看了文檔,才發現另有蹊蹺。 歡迎大家關注騰訊云技術社區-segmentfault官方主頁,我們將持續在博客園為大家推薦技術精品文章哦~ 紀俊,從事Web前端開發工作,2016年加入騰訊OMG廣告平臺產品部,喜歡研究前端技術框架。 這里要討論的話題,不是前端框架哪家強,因為在 Vue 官網就已經...
摘要:一步一步學習一直都有發布他開發的教程。在上有他免費的教程,并且宣稱是世上最深入的系列。基礎在上有個非常的視頻教程。的官網教程非常值得你從頭讀到尾。使用框架這是我們最后一個教程的介紹。不過在和已經有為你準備了不錯的免費課程哈 一步一步學習Vue 2 (Laracasts) Jeffrey Way一直都有發布他web開發的教程。他曾經在30天內教會了我使用jquery。在Laracast...
摘要:因為用戶不用在第一次進入應用時下載所有代碼,用戶能更快的看到頁面并與之交互。譯高階函數利用和來編寫更易維護的代碼高階函數可以幫助你增強你的,讓你的代碼更具有聲明性。知道什么時候和怎樣使用高階函數是至關重要的。 Vue 折騰記 - (10) 給axios做個挺靠譜的封裝(報錯,鑒權,跳轉,攔截,提示) 稍微改改都能直接拿來用~~~喲吼吼,喲吼吼..... 如何無痛降低 if else 面...
摘要:積少成多,最后造成內存泄漏。前端內存泄漏的影響,都是發生在客戶機器上,而且基本上現代瀏覽器也會做好保護機制,一般自行刷新之后都會解決。但是,一旦后端繪制內存泄漏造成宕機之后,整個服務器都會受影響,危險性更大,搞不好年終獎就沒了。 引言 Memory Leak 是最難排查調試的 Bug 種類之一,因為內存泄漏是個 undecidable problem,只有開發者才能明確一塊內存是不是需...
閱讀 1593·2021-11-22 15:33
閱讀 1736·2021-11-15 18:01
閱讀 673·2021-10-09 09:43
閱讀 2613·2021-09-22 16:03
閱讀 763·2021-09-03 10:28
閱讀 3558·2021-08-11 10:22
閱讀 2722·2019-08-30 15:54
閱讀 1766·2019-08-30 14:21