react之Hello World

背景

Facebook 為了開發(fā)一套更好更適合自己的JavaScript MVC 框架,所以產生了react幔嗦。后來反響很好,所以于2013年5月開源蛆楞。

 <!DOCTYPE html>
 <html>
   <head>
     <script src="react.js"></script>
     <script src="react-dom.js"></script>
     <script src="browser.min.js"></script>
   </head>
   <body>
   <div id="box"></div>
   <script type="text/babel">
     // 此處script為解決與js語法不兼容問題为严,必須要加上type="text/babel"
     //
   </script>
   </body>
 </html>

1. react三個基本庫

  1. react.js: React核心庫
  2. react-dom.js: 提供與DOM相關的功能
  3. browser.min.js: 把JXS語法轉化為javascript語法

react之'Hello World':

 ReactDOM.render(
   <h1>Hello, world!</h1>,
   document.getElementById('box')
 );

ReactDOM.render方法為輸出HTML方法逛漫,是react最基本的方法,將輸入的內容插入制定的DOM中

2. JXS語法

在react中锤灿,遇到'<'則按照html語法執(zhí)行挽拔,遇到'{'則按照js語法執(zhí)行,JXS語法允許在模版中插入變量

   var str = 'a';
   ReactDOM.render(
       <h1>{str}</h1>,
       document.getElementById('box')
   );
  //頁面則輸出a但校。

如果變量為數組螃诅,則展開數組所有成員

 var arr = [
  <h1>Hello One!</h1>,
     <h2>Hello Two</h2>
 ]
 ReactDOM.render(
   <div>{arr}</div>,
   document.getElementById('box')
 );
 //頁面直接輸出<h1>和</h2>

3. 組件

生成組件方法
 //組件名稱統(tǒng)一標準,開頭字母大寫状囱,采用駝峰命名法
 //React.creatClass為生成組件的方法,很少出現'定義組件'這個詞
 //HelloWorld為組件類
 //當調用組件术裸,模版插入<HelloWorld />類時,會自動生成一個HelloWorld的實例子
 var HelloWorld = React.creatClass({
      reder: function () {
          return {
               //this.props為一個對象亭枷,組件的屬性可以在生成組件的內部通過this.props 獲取
                <h1>{this.prpos.name}</h1>
           }
       }
 });

 //組件調用
ReactDOM.render(
    <HelloWorld name="HelloWorld" />,
    document.getElementById('box')
);

組件為虛擬DOM,這也是react的基本核心思想,通過組件的狀態(tài)改變來驅動,當狀態(tài)改變時,只更新DOM,不重新渲染整個頁面,這也是和傳統(tǒng)js渲染整個頁面最本質的區(qū)別和優(yōu)點袭艺,即計算出當前虛擬DOM和狀態(tài)改變后虛擬DOM的差異,只改變差異部分,提供性能叨粘。

組件的生命周期
1.實例化

由于react的思想是組件的組合, 同一個實例第一次創(chuàng)建時猾编,會執(zhí)行以下方法

  • getDefaultProps
  • getInitialState
  • conponentWillMount
  • render
  • conponentDidMount

getDefaultProps方法

給是實例子設置默認的props值瘤睹,一般為不可改變的值,另外也是對于父組件沒有傳遞的屬性,這個方法返回該實例自己使用的默認props值答倡,該方法只會被調用一次.

當該組件類第二次及后續(xù)所有的應用默蚌,getDefaultProps方法已經不存在,不會被調用,只執(zhí)行下面四種方法

  • getInitialState
  • conponentWillMount
  • render
  • conponentDidMount

getInitialState方法

在初始化每個實例的時候都會被調用苇羡,并且只調用一次,用來生成默認的狀態(tài)屬性值鼻弧。

conponentWillMount方法

在每次渲染前被調用设江,此時還可以修改state的值,等到render方法執(zhí)行時就state就不可改變了攘轩。

reder方法

render會創(chuàng)建一個虛擬DOM,來表示組件輸出叉存。對組件來說是唯一必須的方法,并需要滿足下面幾點條件:

  1. 只能通過this.props和this.state訪問數據
  2. 可以返回null、false度帮、或組件
  3. 只能出現一個頂級組件,不能返回一組元素,可用div包裹一層或是用組件包裹
  4. 不可改變組件的狀態(tài)歼捏,或者DOM輸出,組件狀態(tài)只能在setState函數中修改

componentDidMount方法

在render方法調用并且DOM已經被渲染后,可以在componentDidMount方法內部通過this.getDOMNode()方法訪問笨篷。

2.存在期

到這時,組件已經渲染完成瞳秽,并且用戶可以進行操作與組件進行交互,比如表單的change事件率翅,react通過判斷組件的狀態(tài)的改變來作出響應更新DOM

 var Input = React.createClass({
    //設置默認state,確定視圖狀態(tài),一般處理數據的簡單變化,長用于表單
    getInitialState: function () {
         return {
             val: 'Hello World'
         };
     },
    
     changeInputVal: function (event) {         
         this.setState({
             value: event.target.value
         });
     },
   
     render: function () {
       var val = this.state.val;
       return (
           <input type="text" value={value} 
           onChange={this.changeInputVal}/     
       );
     }
   });
   ReactDOM.render(
       <div>
           <Input/>
           //p的innerHTML值就會根據value的改變來更新DOM
           <p>{this.state.value}</p>
       </div>  
       document.getElementById('box')
   );

當input的value變化的時候练俐,就會觸發(fā)changeInputVal事件,通過setState來改變value的狀態(tài)值來更新DOM冕臭。

3. 銷毀和清理期

當react使用完一個組件腺晾,這個組件就會從DOM中卸載并被銷毀,componentWillUnMount方法就會作出響應辜贵,完成清理工作悯蝉,隨后移除頂級結構。

注:react數據流向為單向傳遞托慨,父級組件傳遞給子組件鼻由,通過this.props在子組件中獲取。復合組件使用的總結后續(xù)完成發(fā)出榴芳,今天由于時間關系還有bug需要改嗡靡,先總結這些基礎知識,demo暫時也不先做了。學習資料是結合阮一峰react教程,react中文網及react書籍窟感。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末讨彼,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子柿祈,更是在濱河造成了極大的恐慌哈误,老刑警劉巖哩至,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異蜜自,居然都是意外死亡热凹,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門袜硫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挤安,“玉大人,你說我怎么就攤上這事戈鲁〕鸩危” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵婆殿,是天一觀的道長诈乒。 經常有香客問我,道長婆芦,這世上最難降的妖魔是什么怕磨? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮消约,結果婚禮上肠鲫,老公的妹妹穿的比我還像新娘。我一直安慰自己荆陆,他們只是感情好滩届,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著被啼,像睡著了一般帜消。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浓体,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天泡挺,我揣著相機與錄音,去河邊找鬼命浴。 笑死娄猫,一個胖子當著我的面吹牛,可吹牛的內容都是我干的生闲。 我是一名探鬼主播媳溺,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碍讯!你這毒婦竟也來了悬蔽?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤捉兴,失蹤者是張志新(化名)和其女友劉穎蝎困,沒想到半個月后录语,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡禾乘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年澎埠,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片始藕。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒲稳,死狀恐怖,靈堂內的尸體忽然破棺而出伍派,到底是詐尸還是另有隱情弟塞,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布拙已,位于F島的核電站,受9級特大地震影響摧冀,放射性物質發(fā)生泄漏倍踪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一索昂、第九天 我趴在偏房一處隱蔽的房頂上張望建车。 院中可真熱鬧,春花似錦椒惨、人聲如沸缤至。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽领斥。三九已至,卻和暖如春沃暗,著一層夾襖步出監(jiān)牢的瞬間月洛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工孽锥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嚼黔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓惜辑,卻偏偏與公主長得像唬涧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盛撑,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內容

  • 原教程內容詳見精益 React 學習指南碎节,這只是我在學習過程中的一些閱讀筆記,個人覺得該教程講解深入淺出撵彻,比目前大...
    leonaxiong閱讀 2,813評論 1 18
  • It's a common pattern in React to wrap a component in an ...
    jplyue閱讀 3,260評論 0 2
  • 自己最近的項目是基于react的钓株,于是讀了一遍react的文檔实牡,做了一些記錄(除了REFERENCE部分還沒開始讀...
    潘逸飛閱讀 3,360評論 1 10
  • 逝斯人,鑄豐碑志轴合,“西游”經典難再创坞。任他魍魎和魑魅,何懼鬼神妖怪受葛?心不改题涨。除障礙,狂掃困苦能填海总滩。降龍氣概纲堵。有老少...
    唯一還是我閱讀 394評論 2 4
  • 別: 國慶出差在異鄉(xiāng), 閱盡人間多滄桑闰渔, 風景游人疊羅漢席函, 誰看田間農夫忙?
    云之憾閱讀 220評論 0 0