趣談React 的由來(lái)

近期開(kāi)始的了新的學(xué)習(xí)(react)育苟,
本人學(xué)習(xí)有個(gè)習(xí)慣,
喜歡去探索由來(lái)和歷史博烂,
俗稱(chēng)吃瓜(手動(dòng)滑稽)

一般網(wǎng)上的視頻教程只會(huì)教你怎么用 react 但是并不會(huì)告訴你 react 是當(dāng)初是怎么來(lái)的漱竖,為了解決哪些痛點(diǎn)。

首先我們先來(lái)看一段 js 原生代碼馍惹。

這是一段很簡(jiǎn)單的代碼,用于操作 result 的增減悼吱,
現(xiàn)在良狈,
讓我們來(lái)抽象的看待這個(gè)問(wèn)題,
畫(huà)個(gè)圖來(lái)表示:

  • 不管你使用原生 js 還是 jq 都要通過(guò)dom提供的 API吕朵,經(jīng)歷先從頁(yè)面取到內(nèi)容,然后經(jīng)過(guò) js 操作以后再填回去努溃。
  • react 同學(xué)認(rèn)為這太智障了,雖然簡(jiǎn)單沦疾,但是能不能砍掉上面的步驟(從dom取內(nèi)容)或下面的步驟(填回內(nèi)容)呢第队,從而更簡(jiǎn)便呢?
  • 于是 react 同學(xué)砍掉了上面的步驟(砍掉下面的步驟不現(xiàn)實(shí)凳谦,因?yàn)閖s將無(wú)法通知頁(yè)面),直接在 js 中生成 HTML 然后自動(dòng)頁(yè)面中同步(用虛線表示)家凯,然后當(dāng)數(shù)據(jù)更新時(shí)如失,react 將重新生成一個(gè)對(duì)象,再自動(dòng)的去更新原來(lái)頁(yè)面的元素褪贵,從而使得頁(yè)面中的數(shù)據(jù)也是最新值。
  • 這樣一來(lái)事情就變得簡(jiǎn)單了世舰,代碼量減少一半偎快, js 再也不用去頁(yè)面中取元素,只需再 js 中生成填回頁(yè)面中即可晒夹。從來(lái)不去取頁(yè)面中的元素,只去填東西喷好。react 就是在這種理念下誕生了读跷。

接下里我們用這種理念重寫(xiě)一次上面的代碼。

根據(jù)上圖的操作在頁(yè)面中加入一個(gè) span

然后為了加個(gè)按鈕(為了簡(jiǎn)化先在頁(yè)面中手動(dòng)增加)

目前代碼有點(diǎn)粗糙无切,但是為了簡(jiǎn)單明了演示上圖的理念。

  1. js 中生成對(duì)象插入到頁(yè)面中
  2. 更新數(shù)據(jù)時(shí)掘托,重新在 js 中生成對(duì)象同步更新原來(lái)的頁(yè)面元素

接著我們開(kāi)始優(yōu)化一下上圖代碼籍嘹,并把按鈕也放入 js 代碼中:

但是炸一看這代碼還是很傻*,于是我們繼續(xù)來(lái) 分三步 更層次優(yōu)化代碼

  1. 這個(gè) React.creatElement 方法名字太長(zhǎng)了辱士,抽出
  2. 這些個(gè)變量只用過(guò)一次,那我們就可以跳過(guò)聲明變量异赫,直接使用

于是代碼就變成了這個(gè)樣子:

具有一雙慧眼的你头岔,應(yīng)該也看的出來(lái)這樣的代碼很像一種東西把...

這也就是 react 最聰明的一點(diǎn)優(yōu)化,

請(qǐng)先忽略變量的轉(zhuǎn)換

我們驚訝的發(fā)現(xiàn),這樣的 js 代碼和 HTML 標(biāo)簽上并沒(méi)有什么區(qū)別澎胡,
于是聰明的 react 同學(xué)誕生了另一個(gè)想法(JSX)娩鹉,我們能不能讓用戶寫(xiě)下面的代碼,然后經(jīng)過(guò)程序轉(zhuǎn)換成上面的代碼呢弯予?
這樣一來(lái),最終的結(jié)果就是我們通過(guò)寫(xiě)下面的代碼來(lái)替換(也就是等價(jià)于)上面的代碼受楼。
經(jīng)過(guò) react 同學(xué)一番折騰呼寸,JSX 語(yǔ)法上線了 (敲黑板,重點(diǎn):我們并不是在寫(xiě)HTML代碼对雪,而是用HTML的形式來(lái)寫(xiě)JS代碼)

Finally,代碼變成了這樣子react 最終的樣子)

本文完馋艺。

PS
我們改變過(guò)后的類(lèi)似 HTML 代碼就是虛擬 DOM

還有回答一些弱智問(wèn)題
為什么我們?cè)趯?xiě) JSX 的時(shí)候,綁定事件的時(shí)候函數(shù)名后面不帶括號(hào)捐祠,
因?yàn)樵谝婚_(kāi)始的時(shí)候我們?cè)?js 中寫(xiě)的是對(duì)象 {onClick: fn} ,這里需要的fn是整個(gè)函數(shù)劫笙,如果寫(xiě)成 {onClick: fn()}星岗,賦值給 onClick 的就是函數(shù)的返回值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末允华,一起剝皮案震驚了整個(gè)濱河市寥掐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌召耘,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剖踊,死亡現(xiàn)場(chǎng)離奇詭異衫贬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)固惯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)葬毫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人贴捡,你說(shuō)我怎么就攤上這事≌幌荆” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵煎源,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我歇僧,道長(zhǎng)锋拖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任兽埃,我火速辦了婚禮,結(jié)果婚禮上舷夺,老公的妹妹穿的比我還像新娘售貌。我一直安慰自己,他們只是感情好颂跨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布恒削。 她就那樣靜靜地躺著详拙,像睡著了一般蔓同。 火紅的嫁衣襯著肌膚如雪蹲诀。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天则北,我揣著相機(jī)與錄音痕慢,去河邊找鬼。 笑死掖举,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的方篮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼藕溅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼匕得!你這毒婦竟也來(lái)了巾表?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤考阱,失蹤者是張志新(化名)和其女友劉穎惠猿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體偶妖,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趾访,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了申鱼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捐友,死狀恐怖溃槐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昏滴,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布拂共,位于F島的核電站姻几,受9級(jí)特大地震影響势告,放射性物質(zhì)發(fā)生泄漏肌厨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一柑爸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馅而,春花似錦、人聲如沸瓮恭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绳姨。三九已至,卻和暖如春脑蠕,著一層夾襖步出監(jiān)牢的瞬間跪削,已是汗流浹背谴仙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工晃跺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掀虎。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓孕豹,卻偏偏與公主長(zhǎng)得像十气,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砸西,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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