淺析angular,react,vue.js jQuery使用區別


前端越來越混亂了,當然也可以美其名曰:繁榮。
當新啟動一個前端項目,第一件事就是糾結:使用什么框架,重造什么輪子?

PS:大牛留言討論
那么,希望看完此篇,能夠給你一個清晰的認識,或者讓你更加地糾結和無所適從 = =!
本篇拿一注冊功能作為樣本,使用各種框架去實現功能,從而對比各種方式的優劣。

JQuery

<div> <div><input type="text" id="nameIpt"/></div> <div><input type="text" id="statusIpt"/></div> <div><input type="button" value="save" id="saveBtn"/></div> </div> <script>  $(function () {  $("#saveBtn").click(function () {  saveToDB($.trim($("#nameIpt").val()), $.trim($("#statusIpt").val()));  })  function saveToDB() {  //save to db  }  }) </script>

簡單粗暴,用戶行為驅動的思考方式,不需要怎么動腦= =!

Vuejs

<div id="demo"> <div> <input v-model="name"></div>  <div> <input v-model="status"></div> <div> <input v-on="click:save()" type="button" value="save"></div> </div> <script> var demo = new Vue({ el: '#demo', data: { name: '', status:'' }, methods: { save: function () { saveToDB(this.name, this.status); } } }) function saveToDB(name, status) { //.. //.. } </script>

vuejs給人以小清新的感覺,有沒有同感?

Reactjs

var User = function (name, status) { this.name = name; this.status = status; } User.prototype={ save:function(name,status){ //save to db } } var user = new User(); var RegisterComponent = React.createClass({ displayName: "RegisterComponent", getInitialState: function () { return user; }, onFirstInputChange: function () { this.setState({name: React.findDOMNode(this.refs.fistInput).value}); }, onSecInputChange:function(){ this.setState({status: React.findDOMNode(this.refs.secInput).value}); }, save:function(){ //只有不更改input的時候這個返回true,setState之后就成false console.log(this.state===user) //所以使用this.state吧 user.save(this.state.name,this.state.status); }, render: function () { return ( <div> <div>name: <input type="text" onChange={this.onFirstInputChange} ref="fistInput" value={this.state.name} /> </div> <div>status: <input type="text" onChange={this.onSecInputChange} ref="secInput" value={this.state.status} /> </div> <button onClick={this.save}>save</button>      </div> ); } }); React.render(<RegisterComponent />, document.getElementById("RegisterComponentExample"));

突然感覺代碼量為什么劇增啊?每次調用setState,react都會重新調用render。

Extjs

var user = new User(); var rc = new RegisterComponent({ label: "name", onFirstInputChange: function (value) { user.name = value; }, label: "status", onSecInputChange: function (value) { user.status = value; }, onSave: function () { user.save(); }, renderTo: "#rc-ctt" }); //你不是要雙向綁定嗎?我滿足你啊= =! observer.watch(user, function (prop,value) { if (prop === "name") { rc.firstInputValue = value; } else if (prop === "status") { rc.secInputValue = value; } })

Angularjs


Angularjs就不寫代碼了,上面的代碼都是看到這張圖之后才寫的。
ps:這張圖的出處找不到了,找到的童鞋告知下,我加上文章鏈接。

總結

1.jquery依然依靠豐富的dom操作去組合業務邏輯,當業務邏輯復雜的時候,每行代碼都會有不知所雲的感覺。因為:

  • 第一:業務邏輯和UI更改該混在一起,
  • 第二:UI里面還參雜這交互邏輯,讓本來混亂的邏輯更加混亂。

當然第二點從另一方面看也是優點,因為有的時候UI交互邏輯能夠更加靈活地嵌入到業務邏輯,這在其他MV*框架中都是比較難處理的。
2.vuejs非常小清新,小清新不代表做不了復雜的東西,比如官方的這個demo就不錯:http://vuejs.org/examples/svg.html
3.reactjs代碼量最多,因為它既要管理UI邏輯,又要操心dom的渲染。
4.extjs無感 沒用過。
5.angularjs渲染快,就是量大(相對於vue.js)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM