React

1 認(rèn)識React

1.1 React是Facebook內(nèi)部的一個JavaScript類庫,于2013年開源,可用于創(chuàng)建web用戶界面
1.2 react是一個庫,不是一個框架
1.3 react用來創(chuàng)建web用戶界面,不做其他的事情

中文網(wǎng)站 http://www.reactjs.cn/
英文網(wǎng)站http://facebook.github.io/react/

2 React優(yōu)勢

2.1 傳統(tǒng)方法

功能 對DOM進(jìn)行大量的操作,注冊大量的事件,完成相應(yīng)的功能
缺點(diǎn) 需求可以使用,但是隨著事件的增多,邏輯會越來越復(fù)雜,且性能不是很好

2.2 現(xiàn)代方法

React引用了虛擬DOM,基于React進(jìn)行開發(fā)時所有的DOM結(jié)構(gòu)都通過虛擬DOM進(jìn)行,
每當(dāng)數(shù)據(jù)發(fā)生改變,React都會從新構(gòu)建整個DOM樹,然后將當(dāng)前整個DOM樹和上一次
的DOM樹進(jìn)行對比,得到DOM結(jié)構(gòu)的區(qū)別,然后僅僅對變化發(fā)部分進(jìn)行實(shí)際的瀏覽器
DOM更新,由于虛擬DOM是內(nèi)存數(shù)據(jù),**性能極高**

注意! 
1 在使用了React,既不必使用jQuery了
2 虛擬DOM的概念,講我們從頻繁的DOM操作中解放出來

3 React的質(zhì)疑

對于react經(jīng)常會聽到一些反面說法,但是優(yōu)點(diǎn)值得分析

  • react不是MVC框架,它只專注于視圖,也就是說V
  • react是一種思想,提倡"learn once,write anywhere",分web版的react.js和原聲app的react natvie
  • 虛擬DOM / 組件化 / 狀態(tài)機(jī) / 單向數(shù)據(jù)流 是React的主要特性
  • 核心思想:一個應(yīng)用程序在不同的時間點(diǎn),當(dāng)?shù)讓訑?shù)據(jù)改變,react會自動化處理所有用戶界面的更新

4 React入門

4.1 React是一種思想,基于這個思想,有兩大實(shí)現(xiàn)
?React.js 針對web開發(fā),使用的是html,css和js進(jìn)行web UI 的開發(fā)
?React Native 針對原生app開發(fā),包括iOS平臺,Android平臺

1 官網(wǎng)下載 http://www.reactjs.cn/react/downloads.html/

react-15.3.1.zip(壓縮包)
主要文件
1 react.min.js//react的核心文件
2 react-dom.min.js//針對web頁面的DOM操作
3 browser.min.js//使得瀏覽器中支持jsx語法(需要單獨(dú)下載)

代碼如下

<html>
<head>
  <script src="js/react.min.js"></script>
  <script src="js/react-dom.min.js"></script>
  <script src="js/browser.min.js"></script>
</head>
<body>
   <div id="app"></div>
  <script type="text/babel">
    //定義一個組件
    var Hello = React.createClass({
        //組件要渲染的內(nèi)容
        render : function(){
              return (
                    <h2>這是react.js</h2>
        );
      }
    });
//實(shí)例化一個Hello組件對象,渲染到頁面的div#app中去
ReactDOM.render(<Hello />,document.getElementById("app"));
  </script>
</body>
</html>

注意事項(xiàng)!
一 script標(biāo)簽的type屬性需要變成text/babel(jsx語法解析使用)
二 創(chuàng)建組件的時候,使用的是react.createClass方法//構(gòu)造器的方式(首字母是大寫)
三 參數(shù)是一個對象,在render方法中,可以使用html標(biāo)簽和js的混合
四 return 返回的內(nèi)容有且僅有一個根標(biāo)簽
五 在全部的代碼中,凡是出現(xiàn)標(biāo)簽,都必須關(guān)閉
六 在ReactDOM.render方法第二個參數(shù),必須使用DOM的原生方法獲取節(jié)點(diǎn)
七 定義組件類的時候,類名必須是首字母大寫

5 JSX(JavaScript+XML)

5.1 在react組件內(nèi)部構(gòu)建標(biāo)簽的類XML語法

  • 在定義組件類的render方法中,return部分使用
  • 在應(yīng)用組件 ReactDOM.render方法中的第一個參數(shù)
  • 只要使用了jsx語法就要設(shè)置script標(biāo)簽的type屬性值為text/babel

注意事項(xiàng)!
?如果是在HTML標(biāo)簽,直接使用XML標(biāo)簽語法
?如果是js代碼,需要使用 { } 括起來

XML 語法規(guī)定
1 必須擁有唯一的根元素
2 嚴(yán)格區(qū)分大小寫
3 所以的元素都必須關(guān)閉
4 所有的元素都必須正確嵌套
5 所有的屬性都應(yīng)該有屬性值
6 推薦使用XMLspy工具(檢查語法)

5.4 JSX優(yōu)點(diǎn)

簡單 對于熟悉XML發(fā)開發(fā)人員都能輕松紅掌握J(rèn)SX
更加直觀,可讀性強(qiáng)
更加具有語法化
關(guān)注分離點(diǎn),JSX干凈的方式確保標(biāo)簽與業(yè)務(wù)邏輯相分離

5.5 JSX語法

屬性設(shè)置(靜態(tài),動態(tài))
1 靜態(tài)屬性,HTML標(biāo)簽固有的屬性, W3C規(guī)定

1 屬性名的更改(兩個)

  • class =>> className
  • for =>> htmlFor

2 行內(nèi)樣式

  • 在HTML中也可以使用行內(nèi)樣式(使用js中的對象方式來設(shè)置)
  • 使用js的對象方式來進(jìn)行設(shè)置(不能使用CSS來進(jìn)行設(shè)置//會報(bào)錯)
    ps { { } } 使用花括號來嵌套,外面的花括號表示解析js代碼,內(nèi)部表示js對象
  • 注釋 針對JSX語法而言,不同于js注釋
    ps 注釋方式 {/注釋內(nèi)容/}

2 動態(tài)屬性,自定義屬性,由用戶定義
**在js中直接書寫HTML代碼 其實(shí)就是react.js中的jsx語法

6 組件

6.1 組件其實(shí)就是具備獨(dú)立功能的一個模塊(UI部件),MVC是對數(shù)據(jù)和顯示相分離,組件化則是對模塊之間UI功能的分離

組件化的思想(類似于搭積木)
6.2 定義組件

在react中,所有的UI都是基于組件的,最基本的組件就是HTML標(biāo)簽(只需要將它們組合到一起,形成一個復(fù)雜的組件)

  • 定義組件的方法:react對象中的createClass方法
  • react對象是在react.js中定義好的,可以直接使用

**定義組件
在react中元潘,所有的UI都是基于組件的

        //定義一個CommentItem組件類
        var CommentItemComponent = React.createClass({
            getDefaultProps : function() {
                return {
                    title : '默認(rèn)標(biāo)題',
                    content : '默認(rèn)內(nèi)容'
                };
            },
            render : function(){
                return (
                    <li>
                        ![](images/avatar.png)
                        <h3>{this.props.title}</h3>
                        <p>{this.props.content}</p>
                        <ButtonComponent operate="reply" />
                    </li>
                );
            }
        });
        //定義一個CommentList組件類
        var CommentListComponent = React.createClass({
            render : function(){
                return (
                    <ul>
                        <CommentItemComponent title="自己定義的標(biāo)題"/>
                        <CommentItemComponent title="標(biāo)題1" content="組件征讲!" />
                        <CommentItemComponent title="標(biāo)題2" content="組件!" />
                        <CommentItemComponent title="標(biāo)題3" content="組件"/>
                    </ul>
                );
            }
        });

6.3 渲染組件


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末置尔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子顽悼,更是在濱河造成了極大的恐慌,老刑警劉巖拗窃,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件结洼,死亡現(xiàn)場離奇詭異,居然都是意外死亡蝙砌,警方通過查閱死者的電腦和手機(jī)阳堕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來择克,“玉大人恬总,你說我怎么就攤上這事《切希” “怎么了壹堰?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長道偷。 經(jīng)常有香客問我缀旁,道長,這世上最難降的妖魔是什么勺鸦? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任并巍,我火速辦了婚禮,結(jié)果婚禮上换途,老公的妹妹穿的比我還像新娘懊渡。我一直安慰自己刽射,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布剃执。 她就那樣靜靜地躺著誓禁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肾档。 梳的紋絲不亂的頭發(fā)上摹恰,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音怒见,去河邊找鬼俗慈。 笑死,一個胖子當(dāng)著我的面吹牛遣耍,可吹牛的內(nèi)容都是我干的闺阱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼舵变,長吁一口氣:“原來是場噩夢啊……” “哼酣溃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纪隙,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赊豌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瘫拣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亿絮,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年麸拄,在試婚紗的時候發(fā)現(xiàn)自己被綠了派昧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡拢切,死狀恐怖蒂萎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情淮椰,我是刑警寧澤五慈,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站主穗,受9級特大地震影響泻拦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忽媒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一争拐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晦雨,春花似錦架曹、人聲如沸隘冲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽展辞。三九已至,卻和暖如春万牺,著一層夾襖步出監(jiān)牢的瞬間罗珍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工脚粟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留靡砌,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓珊楼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親度液。 傳聞我的和親對象是個殘疾皇子厕宗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容