angularhtml
vue前端
reactvue
ant-designnode
angular是個MVVM的框架。針對的是MVVM這整個事。angular的最主要的場景就是單頁應用,或是有大量數據綁定的狀況。react
特性jquery
雙向數據綁定webpack
ioc依賴注入ios
指令git
上面這幾點用起來確實很爽,隨便指定個區域,配一個controller,而後裏面的東西就都在scrope裏了,確實很方便程序員
若是各位想看,參見 https://github.com/i5ting/ionic_ninja/blob/master/angularjs/angularjs_sang.md
其實angular最好的實踐是ionicframework的,讀讀ionic源碼,才知道啥叫規範
vue是尤同窗寫的一個MVVM中ViewModel中的庫。是針對MVVM中的一層。應用的場景比較廣,只想用vue功能的話就用。
Extendable Data bindings
Plain JS object models
API that simply makes sense
Build UI by composing components
Mix & matching small libraries
這個項目是很是活躍的,90後同窗的精力很旺盛啊。
從最初的ViewModel作到今天的各類功能,作加法還真是挺可怕的事兒。
它的guide上說能夠作Building Larger Apps,見http://vuejs.org/guide/application.html
各類路由,組件啥的都有,的確很強大
可是不少人都搞不定的,首先這麼多概念就玩死一票人了,其次,它有太多東西須要本身去實現,就是能夠複用的東西太少了,若是是小項目玩玩無所謂,若是是大的項目,水平通常的程序員是很難hold住的。
這就比如react出來,很好,但沒有啥可複用的東西,寫來是很是痛苦,因此在下面我介紹了react以後,給出了一個更好的基於react的解決方案。
https://github.com/facebook/react
Virtual DOM是reactjs的最核心概念,我拷貝一段來講明它
在Web開發中,咱們總須要將變化的數據實時反應到UI上,這時就須要對DOM進行操做。而複雜或頻繁的DOM操做一般是性能瓶頸產生的緣由(如何進行高性能的複雜DOM操做一般是衡量一個前端開發人員技能的重要指標)。
React爲此引入了虛擬DOM(Virtual DOM)的機制:在瀏覽器端用Javascript實現了一套DOM API。基於React進行開發時全部的DOM構造都是經過虛擬DOM進行,每當數據變化時,React都會從新構建整個DOM樹,而後React將當前整個DOM樹和上一次的DOM樹進行對比,獲得DOM結構的區別,而後僅僅將須要變化的部分進行實際的瀏覽器DOM更新。
並且React可以批處理虛擬DOM的刷新,在一個事件循環(Event Loop)內的兩次數據變化會被合併,例如你連續的先將節點內容從A變成B,而後又從B變成A,React會認爲UI不發生任何變化,而若是經過手動控制,這種邏輯一般是極其複雜的。儘管每一次都須要構造完整的虛擬DOM樹,可是由於虛擬DOM是內存數據,性能是極高的,而對實際DOM進行操做的僅僅是Diff部分,於是能達到提升性能的目的。這樣,在保證性能的同時,開發者將再也不須要關注某個數據的變化如何更新到一個或多個具體的DOM元素,而只須要關心在任意一個數據狀態下,整個界面是如何Render的。
說那麼多你可能都沒明白,上例子
var HelloMessage = React.createClass({ render: function() { return <div>Hello {this.props.name}</div>; }});React.render( <HelloMessage name="John" />, document.getElementById('container'));
首先,這是一種 HTML-like 的語法,叫jsx,能夠理解成coffee,typescript之類的,須要編譯
核心就是React.render,說明這個組件放在什麼地方,好比上面的例子就是
<div id='container'> ...
</div>
這樣頁面就能夠拆分紅n個小塊,每塊各自爲政,即所謂的組件化(也就積木同樣)
再來個複雜點的,下面給出的是帶有狀態的組件
var Input = React.createClass({ getInitialState: function() { return {value: 'Hello!'}; }, handleChange: function(event) { this.setState({value: event.target.value}); }, render: function () { var value = this.state.value; return ( <div> <input type="text" value={value} onChange={this.handleChange} /> <p>{value}</p> </div> ); } }); React.render(<Input/>, document.body);
Props(屬性,就是element上的attrs,換個名字property,變成複數,即props)
State(寫過view組件的基本都會知道,按鈕有三態,Normal,Highlight,Selected,包括extjs,jquery裏的大部分ui框架都是有狀態的。)
Event(其實還應該算一個就是dom事件,上面的例子就把onChange的handler編譯後的handleChange方法,這要感謝jsx)
瞭解了上面這些,就能夠寫代碼了,由於
屬性,解決了view的定義問題,即語義描述
狀態,是view的有窮狀態機,根據狀態決定ui和行爲
事件,是view裏元素的行爲
單獨的view的話,實際上上面的東西已經足夠了,可是每每咱們用的時候是view和viewController一塊兒用的。
但reactjs裏並無卻分這個,也就是說view和controller都在組件裏,好比ios的可是每每咱們用的時候是view和viewController裏就有不少生命週期方法,這些在reackjs裏也被實現了
組件的生命週期,另外的名字是狀態回調,和上面講的狀態的惟一差異,上面的狀態是它裏面的元素,而組件的生命週期是它本身
組件的生命週期分紅三個狀態:
Mounting:已插入真實 DOM
Updating:正在被從新渲染
Unmounting:已移出真實 DOM
React 爲每一個狀態都提供了兩種處理函數,will 函數在進入狀態以前調用,did 函數在進入狀態以後調用,三種狀態共計五種處理函數。
componentWillMount()
componentDidMount()
componentWillUpdate(object nextProps, object nextState)
componentDidUpdate(object prevProps, object prevState)
componentWillUnmount()
此外,React 還提供兩種特殊狀態的處理函數。
componentWillReceiveProps(object nextProps):已加載組件收到新的參數時調用
shouldComponentUpdate(object nextProps, object nextState):組件判斷是否從新渲染時調用
1)不少人最常問的問題:好比和jQuery集成能夠嗎?
reactjs很小,並無jq提供的功能,能夠說它們是互補的,能夠結合着使用
2)react比angular好用嗎?
reactjs是組件化的最佳實踐,但angularjs的mvvm等好用功能,它是沒有的,因此更好用說不上,姑且能夠認爲各有千秋吧
總結一下,關於reactjs,我沒有講virtual dom,而是主要講了4個概念
屬性
狀態
事件
生命週期
若是你掌握了這4點,實際上就已經能夠很好的使用reactjs了,好比通常view是要和ajax放到一塊兒用的,這時候,只要在組件的生命週期裏處理便可,實際上也仍是上面的東西,此處就不羅嗦了。
todo(reactjs高級篇)
加點 路由和 數據單向流的 東西吧
或者 是服務器端渲染的 數據請求邏輯 什麼的
若是能用redux 和express作個例子 那就更好了
https://github.com/ant-design
特性
提煉自企業級後臺產品的交互語言和視覺風格。
豐富實用的 React UI 組件。
基於 React 的組件化開發模式。
背靠 npm 生態圈。
基於 webpack 的調試構建方案,支持 ES6。
咱們來換一種說法
基於react組件化
代碼在npm裏,作到模塊化
經過webpack構建,更靈活
至於說es幾,那只是噱頭而已
經過npm,能夠更好的和nodejs結合,利用node的生態來擴展,其實bower等也相似,但對package.json不友好,因此我是很看好這種方式的。
之後js大一統,npm就不在只是nodejs package manager的,而是js package manager
另外它的界面設計的很好,模塊化的作的也很好,我很是喜歡,惟一的缺點是它對nodejs的版本要求過高了,會讓一小部分人不適應的。
js是首選
rails也不錯
其餘,要折騰好久
你們可能都有的疑問,這麼技術很是好,個人項目要不要上呢?
先從項目維度看
小項目,無所謂,能夠嚐鮮,填坑和重寫同樣簡單
大項目,傷不起啊,若是不成熟或者無良好生態,當慎重,經得起誘惑
從人的維度看
牛人,無所謂,反正時間和能力都能擠出來,能學到不少東西,但也也要打進去不少夜晚
其餘人,量力而行
我不會在公司項目裏使用vue,但我同意evan的作法,雖然不提倡造輪子,但問題反過來看,它又未嘗不是一個技術人的熱愛呢?
生命不息,折騰又怎會中止,前端或者說js領域的變化愈來愈快,你們準備好迎接多是機遇也多是災難的明天吧,加油!