React 入門實(shí)例(前半部分)

現(xiàn)在最熱門的前端框架耘沼,毫無疑問是React碌冶。

React 起源于 Facebook 的內(nèi)部項(xiàng)目,因?yàn)樵摴緦?duì)市場(chǎng)上所有JavaScript MVC 框架霍骄,都不滿意台囱,就決定自己寫一套,用來架設(shè)Instagram的網(wǎng)站读整。做出來以后簿训,發(fā)現(xiàn)這套東西很好用,就在2013年5月開源了米间。


React

由于 React 的設(shè)計(jì)思想極其獨(dú)特强品,屬于革命性創(chuàng)新,性能出眾屈糊,代碼邏輯卻非常簡(jiǎn)單的榛。所以,越來越多的人開始關(guān)注和使用逻锐,認(rèn)為它可能是將來 Web 開發(fā)的主流工具夫晌。

這個(gè)項(xiàng)目本身也越滾越大,從最早的UI引擎變成了一整套前后端通吃的 Web App 解決方案昧诱。衍生的 React Native 項(xiàng)目晓淀,目標(biāo)更是宏偉,希望用寫 Web App 的方式去寫 Native App盏档。而且目前市場(chǎng)上有很多成熟的react UI框架凶掰,比如說螞蟻金服技術(shù)團(tuán)隊(duì)開發(fā)并維護(hù)的antd,還是蠻優(yōu)秀的蜈亩,感興趣的同學(xué)可以抽空看下懦窘。


React Native

既然 React 這么熱門,看上去充滿希望勺拣,當(dāng)然應(yīng)該好好學(xué)一下。從技術(shù)角度鱼填,可以滿足好奇心药有,提高技術(shù)水平;從職業(yè)角度苹丸,有利于求職和晉升愤惰,有利于參與潛力大的項(xiàng)目。

React.js

我學(xué)習(xí) React 時(shí)赘理,感覺相當(dāng)難上手宦言,與同類型的Vue同樣屬于主流的前端框架,但是后者相對(duì)來說更容易上手商模,學(xué)習(xí)起來成本相對(duì)來說少很多奠旺。但是那為什么大家還趨之若鶩的去用React開發(fā)項(xiàng)目呢蜘澜,肯定是React有一些獨(dú)特或者難以替代的特性。

下面大家一起來試著去了解這個(gè)火了很久的前端框架-----React

一响疚、安裝

React 的安裝包鄙信,可以到官網(wǎng)下載。不過忿晕,React Demos已經(jīng)自帶 React 源碼装诡,不用另外安裝,只需把這個(gè)庫(kù)拷貝到你的硬盤就行了践盼。

$ git clonegit@github.com:ruanyf/react-demos.git

如果你沒安裝 git鸦采, 那就直接下載zip 壓縮包

github

下面要講解的12個(gè)例子在各個(gè)Demo子目錄咕幻,每個(gè)目錄都有一個(gè)index.html文件渔伯,在瀏覽器打開這個(gè)文件(大多數(shù)情況下雙擊即可),就能立刻看到效果谅河。

需要說明的是咱旱,React 可以在瀏覽器運(yùn)行,也可以在服務(wù)器運(yùn)行绷耍,但是本教程只涉及瀏覽器吐限。一方面是為了盡量保持簡(jiǎn)單,另一方面 React 的語法是一致的褂始,服務(wù)器的用法與瀏覽器差別不大诸典。Demo13是服務(wù)器首屏渲染的例子,有興趣的朋友可以自己去看源碼崎苗。

二狐粱、HTML 模板

使用 React 的網(wǎng)頁(yè)源碼,結(jié)構(gòu)大致如下胆数。


demo1

上面代碼有兩個(gè)地方需要注意肌蜻。首先,最后一個(gè)標(biāo)簽的 type 屬性為 text/babel 必尼。這是因?yàn)?React 獨(dú)有的 JSX 語法蒋搜,跟 JavaScript 不兼容。凡是使用 JSX 的地方判莉,都要加上 type="text/babel" 豆挽。

其次,上面代碼一共用了三個(gè)庫(kù): react.js 券盅、react-dom.js 和 Browser.js 帮哈,它們必須首先加載。其中锰镀,react.js 是 React 的核心庫(kù)娘侍,react-dom.js 是提供與 DOM 相關(guān)的功能咖刃,Browser.js 的作用是將 JSX 語法轉(zhuǎn)為 JavaScript 語法,這一步很消耗時(shí)間私蕾,實(shí)際上線的時(shí)候僵缺,應(yīng)該將它放到服務(wù)器完成。

$ babel src--out-dir build

上面命令可以將 src 子目錄的 js 文件進(jìn)行語法轉(zhuǎn)換踩叭,轉(zhuǎn)碼后的文件全部放在 build 子目錄磕潮。

二、ReactDOM.render()

ReactDOM.render 是 React 的最基本方法容贝,用于將模板轉(zhuǎn)為 HTML 語言自脯,并插入指定的 DOM 節(jié)點(diǎn)。

ReactDOM.render

上面代碼將一個(gè)h1標(biāo)題斤富,插入example節(jié)點(diǎn)(查看demo01)膏潮,運(yùn)行結(jié)果如下。


demo1

三满力、JSX 語法

?HTML 語言直接寫在 JavaScript 語言之中焕参,不加任何引號(hào),這就是JSX 的語法油额,它允許 HTML 與 JavaScript 的混寫(查看Demo02)叠纷。

JSX語法

上面代碼體現(xiàn)了 JSX 的基本語法規(guī)則:遇到 HTML 標(biāo)簽(以 ??< ??開頭),就用 HTML 規(guī)則解析潦嘶;遇到代碼塊(以 ? ??{ ? ?開頭)涩嚣,就用 JavaScript 規(guī)則解析。上面代碼的運(yùn)行結(jié)果如下掂僵。


解析結(jié)果

JSX 允許直接在模板插入 JavaScript 變量航厚。如果這個(gè)變量是一個(gè)數(shù)組,則會(huì)展開這個(gè)數(shù)組的所有成員(查看demo03)锰蓬。

示例

上面代碼的arr變量是一個(gè)數(shù)組幔睬,結(jié)果 JSX 會(huì)把它的所有成員,添加到模板芹扭,運(yùn)行結(jié)果如下麻顶。


渲染結(jié)果

四、組件

React 允許將代碼封裝成組件(component)冯勉,然后像插入普通 HTML 標(biāo)簽一樣澈蚌,在網(wǎng)頁(yè)中插入這個(gè)組件摹芙。React.createClass 方法就用于生成一個(gè)組件類(查看demo04)灼狰。

組件

上面代碼中,變量HelloMessage就是一個(gè)組件類浮禾。模板插入時(shí)交胚,會(huì)自動(dòng)生成HelloMessage的一個(gè)實(shí)例(下文的"組件"都指組件類的實(shí)例)份汗。所有組件類都必須有自己的render方法,用于輸出組件蝴簇。

注意杯活,組件類的第一個(gè)字母必須大寫树埠,否則會(huì)報(bào)錯(cuò)魂毁,比如HelloMessage不能寫成helloMessage宾添。另外醉者,組件類只能包含一個(gè)頂層標(biāo)簽皂岔,否則也會(huì)報(bào)錯(cuò)筐赔,也就是說外層標(biāo)簽必須只有一個(gè)<div>XXXX</div>萧锉,而不能寫<div>我是1</div><div>我是二</div>

錯(cuò)誤實(shí)例

上面代碼會(huì)報(bào)錯(cuò)践美,因?yàn)镠elloMessage組件包含了兩個(gè)頂層標(biāo)簽:h1和p颜矿。

組件的用法與原生的 HTML 標(biāo)簽完全一致寄猩,可以任意加入屬性,比如骑疆,就是HelloMessage組件加入一個(gè)name屬性田篇,值為John。組件的屬性可以在組件類的this.props對(duì)象上獲取箍铭,比如name屬性就可以通過this.props.name讀取泊柬。上面代碼的運(yùn)行結(jié)果如下。

渲染實(shí)例

添加組件屬性坡疼,有一個(gè)地方需要注意彬呻,就是class屬性需要寫成className,for屬性需要寫成htmlFor柄瑰,這是因?yàn)閏lass和for是 JavaScript 的保留字闸氮。

本次僅僅講述了部分React特性,下次技術(shù)分享會(huì)會(huì)繼續(xù)把這塊完善教沾,并結(jié)束蒲跨。


彈性盒子布局


聲明:文章在攥寫的過程中部分參考“阮一峰”先生的《React入門》文章,若侵權(quán)請(qǐng)私信刪除授翻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末或悲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子堪唐,更是在濱河造成了極大的恐慌巡语,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淮菠,死亡現(xiàn)場(chǎng)離奇詭異男公,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)合陵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門枢赔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來澄阳,“玉大人,你說我怎么就攤上這事踏拜∷橛” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵速梗,是天一觀的道長(zhǎng)肮塞。 經(jīng)常有香客問我,道長(zhǎng)姻锁,這世上最難降的妖魔是什么峦嗤? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮屋摔,結(jié)果婚禮上烁设,老公的妹妹穿的比我還像新娘。我一直安慰自己钓试,他們只是感情好装黑,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弓熏,像睡著了一般恋谭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挽鞠,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天疚颊,我揣著相機(jī)與錄音,去河邊找鬼信认。 笑死材义,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嫁赏。 我是一名探鬼主播其掂,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼潦蝇!你這毒婦竟也來了款熬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤攘乒,失蹤者是張志新(化名)和其女友劉穎贤牛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體则酝,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡殉簸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喂链。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖妥泉,靈堂內(nèi)的尸體忽然破棺而出椭微,到底是詐尸還是另有隱情,我是刑警寧澤盲链,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布蝇率,位于F島的核電站,受9級(jí)特大地震影響刽沾,放射性物質(zhì)發(fā)生泄漏本慕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一侧漓、第九天 我趴在偏房一處隱蔽的房頂上張望锅尘。 院中可真熱鬧,春花似錦布蔗、人聲如沸藤违。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顿乒。三九已至,卻和暖如春泽谨,著一層夾襖步出監(jiān)牢的瞬間璧榄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工吧雹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骨杂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓雄卷,卻偏偏與公主長(zhǎng)得像腊脱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子龙亲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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