<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      Reactjs-JQuery-Omi-Extjs-Angularjs對比

      2015-05-06 12:22  【當耐特】  閱讀(24067)  評論(11)    收藏  舉報

      寫在前面

      前端越來越混亂了,當然也可以美其名曰:繁榮。
      當新啟動一個前端項目,第一件事就是糾結:使用什么框架,重造什么輪子?
      那么,希望看完此篇,能夠給你一個清晰的認識,或者讓你更加地糾結和無所適從 = =!
      本篇拿一注冊功能作為樣本,使用各種框架去實現功能,從而對比各種方式的優劣。

      ### 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>
      

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

      Omi

      class Hello extends Omi.Component {
      
          style () {
            return  `
                h1{
                	cursor:pointer;
                }`
          }
        
          handleClick(evt){
            alert(evt.target.innerHTML);
          }
        
          render() {
            return  `
            <div>
            	<h1 onclick="handleClick">Hello ,{{name}}!</h1>
            </div>`
          }
      }
      
      Omi.tag('hello', Hello)
      
      class App extends Omi.Component {
        
          render() {
              return  `
              <div>
                  <hello data-name="Omi"></hello> 
              </div>`
          }
      }
      
      Omi.render(new App(),"#container")
      

      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.Omi騰訊出品非常強大
      3.reactjs代碼量最多,因為它既要管理UI邏輯,又要操心dom的渲染。
      4.extjs是唯一一個讓User和View解耦,通過事件回調去關聯起來。也可通過watch去實現雙向綁定。
      5.angularjs沒用過,無感。

      記得當年做silverlight、WPF的時候OnPropertyChanged不都是自己管理的嗎?全都包起來真的好嗎?
      就這么多。

      主站蜘蛛池模板: 国产suv精品一区二区五| 精品人妻一区二区三区四区在线| 亚洲欧美自偷自拍视频图片| 久久精品国产亚洲av麻| 91精品久久一区二区三区| 人人妻人人澡人人爽人人精品电影| 成人性能视频在线| 亚洲人黑人一区二区三区| 国产黄色一级片在线观看| 欧美喷水抽搐magnet| 国产乱妇无码大片在线观看| 中文在线天堂中文在线天堂| 国产成人亚洲精品狼色在线| 屁股中文字幕一二三四区人妻| 中国CHINA体内裑精亚洲日本| 蜜臀av一区二区三区在线| 成av人电影在线观看| 看亚洲黄色不在线网占| 中文字幕少妇人妻精品| 国产sm调教折磨视频| 色偷一区国产精品| 亚洲不卡一区二区在线看| 香蕉久久国产精品免| 福利视频一区二区在线| 国产一区二区三区不卡视频| 人成午夜免费大片| 成年女人免费毛片视频永久| 中文字幕少妇人妻精品| 成人网站免费观看永久视频下载| 国产AV无码专区亚洲AV潘金链 | 国产偷窥熟女高潮精品视频| 伊人精品成人久久综合97| 日本福利一区二区精品| 曰韩无码二三区中文字幕| 免费A级毛片中文字幕| 337p粉嫩大胆色噜噜噜| 日本不卡码一区二区三区| 国产精品一区二区在线欢| 在线A级毛片无码免费真人| 国产乱码1卡二卡3卡四卡5| 蜜桃久久精品成人无码av|