精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

ReactJS :我就是想把代碼和HTML混在一起!

開發 開發工具
當我走進這個著名的咖啡館,這里已經有很多人了,我環顧四周,看到遠處的JSP同學和ASP同學正聊得火熱,他倆,還有今天沒看見的Velocity同學每次都會占據最里邊的座位,似乎故意要逃避大家。

 當我走進這個著名的咖啡館,這里已經有很多人了,我環顧四周,看到遠處的JSP同學和ASP同學正聊得火熱,他倆,還有今天沒看見的Velocity同學每次都會占據最里邊的座位,似乎故意要逃避大家。

從他們的表情看,我就能猜出來這兩個家伙又在抱怨人心不古,世風日下,沒有程序員使用他們了。

旁邊是jQuery和ExtJS, 他倆在低聲交談,時不時朝JSP和ASP方向看兩眼, 我估計jQuery又在宣傳他那DOM操作大法了。

幸好,還有一個靠窗的空桌,有兩個座位, 我走過去坐下,要了一杯咖啡,拿起一本雜志,邊喝邊看。 

[[238363]]

代碼中混雜HTML

這時候又進來一個年輕人,看到我這一桌還有空位,不客氣地坐下, 掏出一張紙,爬在桌子上刷刷刷地寫代碼。

我偷偷看了一眼,不由得大吃一驚: 怎么能在代碼中寫HTML呢?

  1. function Welcome(props) {     
  2.     return <h1>Hello, {props.name}</h1>; 

這時候服務員正好走過來送咖啡, 也注意到了這段代碼, 大叫道:“我賽,這都什么年代了,還在代碼里寫HTML !”

這一下便炸了鍋,ASP, JSP, jQuery, ExtJS等紛紛圍過來看個究竟。

在代碼中寫HTML,我記得這是上個世紀90年代的事情,那時候連ASP,JSP都沒有,只好用C語言寫CGI代碼,HTML就混雜在C代碼中,類似這樣:

  1. void main(){ 
  2.     char content[MAXLINE]; 
  3.     sprintf(content,"<html>"); 
  4.     sprintf(content,"<head>"); 
  5.     sprintf(content,"<title>Homepage</title>"); 
  6.     sprintf(content,"</head>");  
  7.     ......其他內容略......  
  8.     printf("Content-length : %d \r\n",(int)strlen(content)); 
  9.     printf("Content-type:text/html \r\n\r\n"); 
  10.     printf("%s",content); 
  11.     fflush(stdout); 
  12.     exit(0); 

這種模式給修改界面和業務邏輯帶來了巨大的麻煩,等到ASP, JSP這樣的“模板”語言出現以后,變成了在HTML中寫代碼: 

UI設計師先把HTML頁面整體設計好,交給程序員再用<%..%>在其中填入動態的部分, 這種方式可以讓設計師和程序員更好地合作。

  1. <%@ Language="VBScript" %> 
  2. <html> 
  3. <head><title>我的主頁</title></head> 
  4. <body> 
  5. <% For i=3 to 5 %> 
  6. <font size=<%=i%> > 
  7.     你好,歡迎來到我的主頁。 
  8. </font> <br /> 
  9. <% Next %> 
  10. </body> 
  11. </html> 

現在又有人想在代碼中寫HTML,簡直是瘋了!

模板 vs 組件

看到這么多人圍過來, 小伙子漲紅了臉:“我這不是HTML,我這個是JSX,是JavaScript的一個語法擴展,你們仔細看看,其實和ASP的模板也很像的。”

<h1>Hello, {props.name}</h1>

“那你為什么不直接用模板,為什么要把HTML放到JavaScript當中?這是我們早就拋棄的反模式!”  ASP問道。

“對啊,為什么不用模板? ”  周圍的人也隨聲附和。

“因為我覺得模板難于復用!” 小伙子突然大聲說道。

說起復用,這一點我的體會太深了,在開發中,我通常把描述界面結構的HTML,描述展示的CSS, 和操作DOM的JavaScript放在不同的文件當中,在運行時把他們結合起來, 但是這種分離只是技術層面分開管理而已,在邏輯上并沒有實現高耦合的組件,也就無法復用。

“我想了一個新的辦法,” 小伙子繼續說道,“組件化,我們可以創建一個個的組件,然后讓這些組件組合起來形成一個完整的Web界面。 就像我剛寫的組件Welcome,可以復用的,可以用在Web頁面的任何地方。”

“組件? 這小子有點想法。” ASP說道,“我表哥Visual Basic 就有很多組件,奧,好像大家叫他控件,在開發一個應用的時候,只需要把控件拖拽到表單界面上,設置屬性,編寫對事件的處理代碼就可以了,非常簡單快速。”

“你怎么沒給我說過?” JSP表示不滿, 他和ASP在90年代打得你死我活,現在拋棄了門戶之見,成了好基友。

小伙子向ASP投去感激的目光,找到支持支持者了。

沒想到ASP馬上潑了一盆冷水:“不過控件是在桌面應用使用的,在Web開發中我們不這么干,它和桌面應用差別太大,實現不了。”

小伙子馬上反駁:“怎么實現不了,一個組件不就是一個可以復用的單元嗎? 在Web頁面上, 這個組件要像桌面應用那樣,負責自己的展示和行為,有屬性可以設置,有方法可以調用,對外可以響應事件(Event), 對內可以維護組件狀態。”

我說道:“你說說你那個Welcome組件具體怎么復用?”

小伙子說: “很簡單,在JSX中,那個Welcome組件就像普通的HTML標簽一樣,直接就可以使用了!”

  1. function App(props){ 
  2.   return
  3.     <div>      
  4.       <Welcome name="碼農翻身" /> 
  5.       <Welcome name="張大胖" />       
  6.     </div> 
  7.   ); 

確實是不錯,這些自定義的標簽(組件),可以一層層地組合起來,構建成一個大的頁面。

有狀態的組件

還是jQuery經驗老道,他瞇著眼看了半天,開始發難:“你號稱是組件,但組件都是有內部狀態的,而你這代碼就是一個函數而已,一個輸入,一個輸出,根本不是組件!”

小伙子說:“你說得沒錯,那個組件是個無狀態的組件,只有輸入和輸出,我給你看個有狀態的組件。”

  1. class Counter extends React.Component{ 
  2.    constructor(props){ 
  3.      super(props); 
  4.      this.state = {count : 0}; 
  5.    } 
  6.    handleClick(){ 
  7.      this.setState({count: this.state.count + 1}); 
  8.    } 
  9.    render(){ 
  10.      return ( 
  11.        <div> 
  12.          <button onClick={(e) => this.handleClick(e)}>Click!</button> 
  13.          <h3> 
  14.            Click Count : {this.state.count
  15.          </h3> 
  16.        </div> 
  17.      ); 
  18.    } 
  19.  } 

這個組件一下子就復雜多了,似乎是一個繼承了Component的類,有構造器,有函數,還有個返回HTML的render方法。

小伙子說:“看到沒有,這是一個用來計數的小組件, 數值被保存起來了,就是那個 this.state.count ,初始值為0, 每次點擊就會調用this.setState函數,把count 加一。”

小伙子說著在瀏覽器中給我們展示了一下效果,果然,每次點擊,Count數都會變化。

我們看了以后都有一個感覺,這確實是一個組件,你看它內部有展示的邏輯,有狀態,有操作,自己的活兒自己干。

“state ? 你不是有props嗎? 還用state ? ” ExtJS 看到jQuery沉默了,馬上為朋友兩肋插刀。

小伙子說道:“是這樣的,我用props 來保存從上層組件(父組件)傳遞過來的數據,用state來保存本組件的內部數據。”

jQuery道:“父組件可以用props給子組件傳遞數據,那子組件如果想把數據告訴父組件,該怎么處理?”

小伙子向jQuery投去佩服的目光, 回答道:“這個問題我想過了,父組件可以用props傳遞一個'鉤子'函數給子組件,在必要的時候,子組件就調用這個函數,把數據告知父組件。”

UI = render(data)

jQuery不甘心,想了一會兒,又拋出一個重磅炸彈:“怪哉怪哉,從你這個Counter組件中,怎么看不到對DOM的操作? 如果沒有DOM操作,你怎么實現點擊了Click! 按鈕以后,下面的數目發生變化的? ”

jQuery是操作DOM的高手,什么鏈式調用了,選擇器了被他玩得賊溜,現在看到Counter組件中連一行DOM操作的代碼都沒有,顛覆了自己的人生觀,肯定要弄個究竟。

“我估計大家都用JavaScript操作過DOM,說實話,很簡單,很直觀,可是當項目變得復雜以后, 當頁面上的事件處理多了以后, JavaScript的代碼會和DOM緊密地糾纏在一起,就不好維護了。”  小伙子說道。

大家都紛紛點頭。

“所以呢, 所以我就想辦法把他屏蔽了,在我這里,不用操作DOM,只要你調用setState方法,我發現數據發生了變化,我就會渲染整個頁面。所以對程序員來講,在概念上非常簡單,只需要setState,剩下的操作都交給我。 用個公式來表達就是 UI = render(data) 。  ”

“嘶.....”    聽到這個“渲染整個頁面”,大家伙都倒吸了一口涼氣。如果一個頁面有很多數據,現在只改變了一個小小的count的數值 ,難道還要把其他的也全部渲染一遍?

看到大家疑惑的表情,小伙子笑了笑,解釋道:“全部渲染是從概念上來說的,在實現層面,還是局部更新。為了實現這一點,我特意實現了一個虛擬的DOM。”

“每次數據發生了變化,我會比較兩個虛擬DOM的區別,找到那些數據真正發生改變的地方,然后操作真正的DOM, 這樣以來,其實真正的更新還是局部的。”

看到了虛擬DOM, 大家都明白這小伙子絕對不是一般人了!。

但是看到那混雜著代碼和HTML的,試圖改變Web開發方式的“組件”,都覺得不可思議,難以接受,搖著頭,慢慢地散開了。

ASP一邊走一邊給JSP說:“這玩意兒,太顛覆了,根本不會有人用。”

JSP同意:“是啊,我們還是玩模板去吧。”

人走得差不多了,我問小伙子:“你叫什么名字? ”

“ReactJS。”

“有沒有興趣到我們公司工作? ” 我遞上了我的名片,上面印著我們公司的Logo : Facebook。

【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2013-08-06 09:49:01

2018-02-01 21:18:40

戴爾

2015-10-20 16:48:06

AnsibleDocker可擴展設計

2011-01-20 11:42:49

同事

2016-09-02 16:49:54

APPVR

2016-08-12 09:49:06

Intel

2009-11-06 08:57:31

WCF開發

2009-07-22 09:29:44

ScalaSpiral程序

2015-03-05 10:27:56

蘋果IBM

2022-05-06 14:19:02

邊緣計算物聯網5G

2021-03-15 10:26:29

邊緣計算云計算混合云

2017-11-15 08:26:52

IntelAMD技術

2020-09-16 11:20:40

PythonBashLinux

2019-01-03 13:58:53

人工智能大數據數據分析

2015-02-09 19:49:19

暢捷通

2015-04-22 17:22:05

eBay京東

2015-11-16 17:13:05

巴黎恐怖襲擊互聯網公司

2015-11-12 10:23:35

5G物聯網

2021-04-12 18:03:39

Nginx架構負載

2020-11-30 10:30:01

神經網絡感知機中間層
點贊
收藏

51CTO技術棧公眾號

欧美日韩一区二区免费在线观看| 日韩视频一区二区三区在线播放免费观看| 懂色av影视一区二区三区| 欧美大香线蕉线伊人久久| 中文字幕av影视| **女人18毛片一区二区| 亚洲成人在线网| www.色就是色| 在线三级中文| 久久免费美女视频| 91网站免费看| 欧美亚洲另类小说| 欧美视频日韩| 中文字幕亚洲欧美一区二区三区| 中文字幕一二三区| 日韩不卡免费高清视频| 一区二区欧美国产| 亚洲va久久久噜噜噜久久狠狠 | 色多多视频在线观看| 成人午夜精品一区二区三区| 国产精品成人国产乱一区| 麻豆视频在线观看| 日韩在线不卡| 日韩电影中文字幕一区| 精产国品一区二区三区| 九九九精品视频| 欧美色道久久88综合亚洲精品| 色爽爽爽爽爽爽爽爽| 久久国产精品高清一区二区三区| 福利视频网站一区二区三区| 国产精品丝袜久久久久久不卡| 欧美日韩综合在线观看| 黑人一区二区| 欧美激情精品久久久久久久变态| 蜜桃av免费观看| 国产99亚洲| 亚洲国产高清自拍| 极品白嫩的小少妇| 日韩欧美另类中文字幕| 欧美日韩国产电影| 天天影视综合色| 日韩精品专区| 91九色最新地址| 爱福利视频一区二区| 69av成人| 一区二区成人在线| www插插插无码免费视频网站| 黄色免费网站在线观看| 国产精品久久久久7777按摩| 视频一区二区三区在线观看| 国产高清一区在线观看| 国产欧美日韩三区| 亚洲国产精品综合| av网站在线免费观看| 中文字幕精品综合| 中文字幕成人一区| 2021国产在线| 亚洲综合清纯丝袜自拍| 久久国产精品免费观看| 中文在线免费| 亚洲电影中文字幕在线观看| 成人一区二区免费视频| 亚洲欧美小说色综合小说一区| 日韩欧美在线免费观看| 无码人妻精品一区二区三区66| 在线成人视屏 | 午夜精品中文字幕| 亚洲国产aⅴ精品一区二区三区| 欧美在线视频日韩| 性欧美在线视频| 三级欧美日韩| 亚洲精品aⅴ中文字幕乱码| 国产成人无码一区二区在线观看 | 337p日本欧洲亚洲大胆精品| 韩国三级hd两男一女| 亚洲影院天堂中文av色| 怡红院精品视频| 四虎影院中文字幕| 极品裸体白嫩激情啪啪国产精品| 69久久夜色精品国产7777| 黄色一级视频免费看| 久久9热精品视频| 99一区二区| 免费毛片在线| 亚洲男同性视频| 日韩中文字幕在线视频观看| 日韩成人亚洲| 欧美成人伊人久久综合网| 手机在线看片日韩| 我不卡影院28| 91成人免费观看网站| 一区二区三区日| 成人福利在线看| 性刺激综合网| 蜜桃视频动漫在线播放| 欧美疯狂性受xxxxx喷水图片| 岛国av免费观看| 日韩精品电影| 韩国19禁主播vip福利视频| а中文在线天堂| 成人午夜又粗又硬又大| 亚洲视频精品一区| 日韩脚交footjobhdboots| 91.成人天堂一区| av在线网站观看| 欧美高清不卡| 国产精品美女网站| 亚洲人视频在线观看| 136国产福利精品导航| 欧美成人一区二区在线观看| 国产精品一区二区三区四区在线观看| 亚洲国产精品专区久久| 波多野结衣亚洲一区二区| 久久久久网站| 国产精品乱码| 在线网址91| 在线电影院国产精品| 免费污网站在线观看| 亚洲国产精品一区制服丝袜| 成人免费网站在线| 草碰在线视频| 一本一道波多野结衣一区二区| 久久黄色一级视频| 97国产精品| 国产精品久久二区| 欧美婷婷久久五月精品三区| 亚洲国产综合在线| 黑人无套内谢中国美女| 国产精品毛片久久| 国产精品久久久久久网站| 亚洲日本香蕉视频| 偷拍亚洲欧洲综合| 88av在线播放| 亚洲国产日韩在线| 成人片在线免费看| 欧美卡一卡二| 欧美v亚洲v综合ⅴ国产v| 免费在线观看黄色小视频| 奇米精品一区二区三区四区| 欧美成人免费在线| 中文字幕在线看片| 亚洲欧美国内爽妇网| 五月天综合激情网| www.日韩精品| 自拍日韩亚洲一区在线| 伦理一区二区三区| 2018日韩中文字幕| 天堂av中文在线资源库| 午夜精品福利在线| 国产艳俗歌舞表演hd| 国产精品亚洲综合色区韩国| 久久精品日产第一区二区三区乱码| 韩国日本一区| 亚洲精品国产精品自产a区红杏吧| 国产午夜免费视频| 91亚洲永久精品| 精品国产免费av| 九九热爱视频精品视频| 国产91热爆ts人妖在线| 波多野结衣一区二区| 欧美婷婷六月丁香综合色| 五月天婷婷丁香网| 精品一区二区三区久久| 中日韩在线视频| 视频精品二区| 97超碰国产精品女人人人爽| 婷婷亚洲一区二区三区| 欧洲国产伦久久久久久久| 国产精品麻豆一区| 国产精品一区二区三区四区| 777av视频| 欧美一级精品| aa日韩免费精品视频一| 漫画在线观看av| 综合av色偷偷网| 草逼视频免费看| 欧美日韩亚洲一区二区三区| 1024手机在线观看你懂的| 国产一区999| 日韩av在线第一页| 久久影视一区| 国产在线一区二区三区欧美| 国产精品高清乱码在线观看| 久久久国产成人精品| 国产综合在线播放| 欧美午夜片在线观看| 久久亚洲av午夜福利精品一区| 久久综合色之久久综合| 一本色道久久亚洲综合精品蜜桃| 狠狠88综合久久久久综合网| 日本黑人久久| 99久久人爽人人添人人澡| 青青草精品毛片| 18视频在线观看网站| 国产午夜精品视频免费不卡69堂| 99久久国产热无码精品免费| 色综合久久六月婷婷中文字幕| 黄色录像一级片| 久久久亚洲精品石原莉奈 | 粉嫩av国产一区二区三区| 91麻豆产精品久久久久久| 欧美在线精品免播放器视频| 免费看美女视频在线网站| 亚洲精品美女久久久久| 国产精品久久影视| 色综合久久中文字幕综合网| 国产十六处破外女视频| 国产午夜精品一区二区三区嫩草| 中国特级黄色大片| 国模一区二区三区白浆 | 免费黄网站欧美| 男人的天堂狠狠干| 影音先锋日韩在线| 亚洲国产精品日韩| 亚洲肉体裸体xxxx137| 成人在线视频网址| 欧美综合社区国产| 国产精品福利观看| 在线高清av| 久久久影视精品| 国产福利视频在线观看| 中文字幕在线日韩| 激情综合闲人网| 亚洲国产精品久久精品怡红院| 97国产精品久久久| 欧美性猛交xxxxxxxx| 日韩少妇裸体做爰视频| 伊人夜夜躁av伊人久久| 婷婷综合在线视频| 国产欧美日韩在线| 国产精品天天干| 91麻豆免费视频| 999精品免费视频| 成人性生交大合| 欧美xxxx黑人| 国产成人免费视频网站高清观看视频| 五月天激情播播| 麻豆高清免费国产一区| 北条麻妃在线视频| 久久青草久久| 久久午夜夜伦鲁鲁一区二区| 蜜桃久久av| 青青在线免费观看视频| 日韩精品一二三四| 亚欧在线免费观看| 免费看欧美美女黄的网站| 一区二区xxx| 麻豆成人av在线| 亚洲午夜精品一区| 国产精品一区二区三区99 | 久久蜜桃一区二区| 日韩精品电影一区二区| 久久久www成人免费无遮挡大片| 成年人网站免费看| 国产亚洲精品资源在线26u| 国产肥白大熟妇bbbb视频| 国产亚洲一二三区| 欧洲性xxxx| 亚洲三级免费观看| 久久久精品一区二区涩爱| 亚洲高清免费观看高清完整版在线观看| 久一区二区三区| 岛国av一区二区三区| 久操视频在线免费观看| 欧美日韩精品二区第二页| 国产美女免费看| 337p日本欧洲亚洲大胆色噜噜| 亚洲 欧美 激情 小说 另类| 亚洲美女www午夜| 人人干在线视频| 欧美激情免费看| 成人片免费看| 91麻豆桃色免费看| 噜噜噜狠狠夜夜躁精品仙踪林| 日韩一二三区不卡在线视频| 亚洲成av人电影| 日韩亚洲欧美视频| 日韩影院精彩在线| 老熟女高潮一区二区三区| 2021久久国产精品不只是精品| 欧美成人短视频| 亚洲一区二区成人在线观看| 日韩精品一区二区亚洲av| 精品视频1区2区| 好男人www在线视频| 国产亚洲精品激情久久| 中文字幕伦理免费在线视频| 日本sm极度另类视频| 精品视频91| 欧美aaaaa喷水| 欧美精品aa| 日韩一级片播放| 成人午夜在线播放| 四虎884aa成人精品| 精品久久香蕉国产线看观看亚洲| 一级黄在线观看| 亚洲精品中文字幕av| 顶级网黄在线播放| 国产精品7m视频| 精品三级av| 成人在线免费观看网址| 日日欢夜夜爽一区| 中国xxxx性xxxx产国| 国产精品家庭影院| 综合网在线观看| 欧美成人激情免费网| 成人高清在线| 18一19gay欧美视频网站| 日韩欧美久久| 中文字幕一区二区三区有限公司| 新67194成人永久网站| 亚洲综合中文网| 亚洲欧美日韩在线播放| 精产国品一区二区| 亚洲激情国产精品| 18videosex性欧美麻豆| 国产欧美日韩中文字幕| 欧美美女在线| 欧美 日韩 国产在线观看| 国产精品一二三四区| 任我爽在线视频| 色婷婷av一区二区三区软件 | 99视频精品全部免费在线| 国产大学生自拍| 欧美一区欧美二区| 日本视频在线| 国产欧美va欧美va香蕉在线 | 中文字幕第一页亚洲| 全国精品久久少妇| 色婷婷av777| 欧美视频一区二区三区…| 人妻少妇精品无码专区久久| 欧美成人中文字幕| 免费看日产一区二区三区| 最近中文字幕免费mv| 美女网站色91| 激情无码人妻又粗又大| 欧美日韩一级视频| 调教视频免费在线观看| 国产欧美精品久久久| 久久美女视频| 亚洲精品理论电影| 日本免费在线视频观看| 国产精品腿扒开做爽爽爽挤奶网站| 中文字幕乱妇无码av在线| 一区二区三区中文字幕| 99久久精品日本一区二区免费 | 久久狠狠一本精品综合网| 国产又粗又猛又色| 欧美日韩在线视频首页| 欧洲亚洲在线| 国产精品一区二区女厕厕| 国产精品久久久久久| 手机精品视频在线| 亚洲高清不卡在线观看| 天天操天天舔天天干| 欧美在线视频一区二区| 国产毛片一区二区三区| 在线视频日韩一区 | 亚洲人在线观看| 精品成人免费一区二区在线播放| 四虎一区二区| 青青草精品视频| 顶臀精品视频www| 精品美女一区二区| 一区二区乱码| 最新欧美日韩亚洲| 国产传媒欧美日韩成人| 日韩黄色一级大片| 亚洲视屏在线播放| 国产精品日本一区二区三区在线 | 一本色道久久综合狠狠躁篇怎么玩| 色8久久影院午夜场| 免费在线观看污污视频| 丁香啪啪综合成人亚洲小说| 日本三级一区二区| 中文字幕亚洲无线码a| 国产成人久久精品一区二区三区| 美女扒开大腿让男人桶| 久久久久免费观看| 国产情侣在线播放| 欧美伊久线香蕉线新在线| 99久久激情| 捆绑裸体绳奴bdsm亚洲| 欧美手机在线视频| 高h视频在线播放| 日韩jizzz| 东方aⅴ免费观看久久av| 无码任你躁久久久久久久| 久久亚洲春色中文字幕| 啪啪激情综合网| 欧美一级xxxx| 精品毛片网大全| 成人短视频在线| 日本高清不卡三区| 成人免费黄色大片| 国产一区二区三区中文字幕| 6080yy精品一区二区三区| 88国产精品视频一区二区三区| 欧美做受喷浆在线观看|