圖解 React
React、ReactJS、React.js、React Native… 這些有些相似的名詞你最近聽過多少遍了?對於它們究竟是什麼你是否感到困惑?
如果你是一名設計師,你所在的團隊使用 (或正在考慮使用) 的技術是 React ,或者你只是單純對 「React」 比較好奇的話,那麼本文就是為你而準備的。
在文本中,我只使用樸實的語言和插圖來解釋 React 家族中的各種術語,並深入探索究竟是什麼使得 React 如此特別。本文中並不需要任何代碼知識便可閱讀。我希望你先熟悉一些概念,從而不至於在後面的學習過程中感到絕望。如果後面需要溫故而知新的話,歡迎隨時回來閱讀。
準備好了嗎?我們開始了!
學習目標
讀完本文後,希望你能夠重新回到這裡,並能夠輕鬆回答下列問題:
什麼是 DOM ?
什麼是 React ?它的哪些方面比較適合應用開發?
React 與 jQuery 的不同之處?
React 的核心概念是什麼?
什麼是響應式 UI ?
組件有哪些好處?
關於 Web 你需要了解的
我們先來介紹一些你可能聽過很多年的術語。首先是 DOM 。
DOM
DOM 的全稱是 Document Object Model (文檔對象模型)。很簡單吧?它就是文檔對應的對象模型。
先暫時忘掉它的概念。我們先來看看大名鼎鼎的 「Web Browser」 工作室!你能在下面的插圖中找到 DOM 嗎?
難道 DOM 是…… 一棵樹?對,就是一棵樹!奇怪的是,計算機相關的很多東西其實都像是一棵樹。
我們來給 DOM 起個昵稱…… 就叫 Domo 如何?Domo 是 「Web Browser」 工作室的御用模特,他的工作就是在肖像畫家 (也可能是數百萬個畫家) 面前擺 pose 。
肖像就是在瀏覽器中瀏覽網站時所看見的內容。開發者的職責就好比是導演,他來告訴 Domo 該穿什麼衣服,擺什麼 pose 。這將決定肖像最終畫出來的樣子。jQuery 和 React 都是庫,開發者使用它們作為與 Domo 交流的工具。
jQuery
jQuery 是一個 JavaScript 庫,它可以使開發者操縱 DOM 變得簡單得多。那他在 Domo 的故事中又扮演什麼角色呢?
它是一個工具,可以簡化開發者與 Domo 溝通的過程,就像是一部手機。無論何時何地都可以輕鬆呼叫 Domo 。相比於之前 (使用原生 JavaScript),它要方便得多,還記得在電話發明出來之前人跟人連簡單交流都要走得足夠近才行。
多年以來,我們一直都在使用 jQuery 來直接與 Domo 溝通。是很方便,但並非沒有問題。
React
下面請允許我來為你介紹一個全新的超級英雄: React 。
使用 React 的話,開發者不再需要直接跟 Domo 溝通。React 扮演在開發者和 Domo 之間的中間人角色。他降低了兩者之間的溝通成本,同時簡化了肖像創建的過程。
React 使用了一些技術來解決 jQuery 和其他工具中所存在的問題。下面是它的三項核心技術:
響應式 UI
虛擬 DOM
組件
響應式 UI
使用 jQuery 來更新 DOM 的話,你需要在適當的時機以正確的順序來指定要更改的元素。這等同於給 Domo 一步步講述頭怎麼擺、胳膊放在哪、腿什麼姿勢,等等,並且每張肖像都是如此。
我靠,這聽起來太乏味了,並且容易出錯!為什麼不直接告訴 Domo 你想要的效果,而不是現在這樣一步步地告訴他怎麼擺 pose ?
還有更酷的,想像一下如果可以在要求過程中保留一個佔位符來表示相同姿勢的不同變體。React 就能做到!
這種方式的話,當畫家要求 Domo 穿戴不用的帽子作畫時,你不需要每次都告訴 Domo 戴哪頂帽子。你儘管坐在一旁讓他自己換帽子即可。
這項技術正是 React 名字的由來。使用 React 構建的 UI 是響應式的。作為開發者,你只需編寫你想要的是什麼,React 自己會弄清楚該怎麼做。當數據變化時,UI 會相應地發生改變。你無需再關心 DOM 的更新,React 會自動幫你完成。響應式 UI 的理念大大地簡化了 UI 開發。
我知道我說過你不需要任何編碼知識,但只是為了幫助你正確地看待問題,我還是用代碼把它寫了出來。請查看下面的示例 (嘗試更換 Domo 的帽子)):
Codepen 在線 Demo: Domo 的帽子 。
在後面的文章中我會來講解完整的代碼,但此時你只需簡單看一眼關鍵代碼即可:
注意,你只需定義你想要的 (戴帽子的思想者),並 「連接」 上數據 ( ) 。當數據發生變化時 (用戶選擇一頂帽子),UI 會自動更新。
虛擬 DOM
jQuery 的另一個問題就是它的運行速度。
作為一個嚴苛的導演,你討厭等待。你想要肖像畫儘可能快地完成。但是,Domo 和畫家都比較慢,並非是樹瀨那種慢,只是 Domo 需要時間來換裝和擺 pose ,並且畫家作畫也需要時間。
更糟糕的是,在畫家完成一幅肖像畫之前,你無法與 Domo 進行溝通。事實上,你什麼也做不了,除了等待。真浪費時間!
React 採用了另一項技術來解決此問題。React 畫草稿的速度超級快。是當你告訴他你的要求後,他幾乎就能立即將草稿完成並準備畫下一張。現在就無需等待了!你可以不停地告訴 React 你想的肖像。React 將會紀錄草稿的所有細節,並在適當的時候展示給 Domo 看。
更重要的一點是 React 十分聰明。他還會對所有草稿進行整理,拿掉重複的並確保 Domo 和畫家的工作量維持在最低水平。
這些草稿就是 「虛擬 DOM」 。虛擬 DOM 要比操縱 DOM 快得多得多。開發者絕大部分時間裡其實都是在操縱虛擬 DOM ,而不是直接操縱真實的 DOM 。React 負責管理 DOM 的這部分臟活。
組件
React 中第三項技術就是組件的概念。
組件應該很容易理解,因為我們所生活的現實世界就是由組件組成的。我們的車、房,甚至是身體都是由不同的組件所組合而成的。這些組件又是由一些更小的組件組合而成,以此類推,直至分解成原子。
如果你熟悉 Sketch (譯者注: 著名的設計軟體,與 PhotoShop 齊名) 的話,組件與 Sketch 中的 symbols 十分類似。構建 React 應用幾乎都是在同組件打交道: 尋找最適合的組件、融合兩個組件、在現有組件的基礎上創建新組件,等等。
回到 「Web Browser」 工作室,你將肖像的需求描述成一個個組件,React 將這些組件翻譯成 Domo 所能理解的內容。這將為你節省大量時間,因為你無需再一次次地重複描述需求中的通用部分。
組件另外很酷的一點是如果你改變了某個組件,那麼所有使用此組件的地方都將自動更新。
總結
好了。希望你能學會一些 React 的知識。本質上,它還是一個工具,用來幫助開發者操縱 DOM ,從而構建出頁面。響應式 UI 、虛擬 DOM 和組件是 React 的三大核心概念,正是有了它們才使得 React 如此特別。當然,React 還有一些其他有趣的概念,比如單向數據流,我會在後面的文章中介紹。
作者:Linton Ye
https://learnreact.design/2017/06/08/what-is-react/
譯者:鄭豐彧
https://zhuanlan.zhihu.com/p/39658720


※淺入淺出前端這些技術
※後端說:只是你不懂怎麼用 headers!
TAG:JavaScript |