在估評、挑選網頁應用程式的技術範疇時,無庸置疑的容器化和前後端分離兩項技術已經是軟體開發業界默認的 De facto standard ,而前後端程式分離的概念與實踐更是一舉改變軟體工程師的職務劃分。以 JavaScript 為核心語言的網頁工程師,逐步變成掌握網站與行動應用開發話語權的前端工程師。隨著 Node.js 以其高效能成為網頁後端技術新竉兒,各種超越 JQuery 這個前端 JavaScript 函式庫的挑戰者們,也因為其青出於藍而大放異彩。其中 React 便是獨領風騷的一方之霸。
對於一個從事後端開發的工程師來說,學習 React 技術,目標純粹只是想減少自己對前端技術的知溝,方便未來能與前端工程師同事更容易討論、合作有前後端分離的網站專案。不過事與願違,在完全沒基礎的情況下,嘗試去搞清楚所謂的前端技術是怎麼一回事,很容易用自己瞭解的技術去推論,而有所侷限,反而看不清真相。像我一開始也鬧了個笑話,把 React 誤以為是 Java 語言裡的 Reactive 技術,還因此去研究了 Spring WebFlux。或是後來分不清 React 和 Node.js 的角色與關係,把 React 誤當成是某種 Node.js 上的框架。後面這點倒是不能笑我,畢竟 React 的開發環境太依賴 Node.js 了,幾乎所有的資料都是指導 React 開發者先安裝 Node.js。
正在苦惱如何事半功倍地學習必要的前端基礎時,React思維進化一書如天降甘霖般紓解我的煩憂。全書的目標便是替讀者們建立最正確、基礎的 React 技術觀念。也順道解答了為何 React 這樣的前端技術能將 JQuery 取而代之,而且形同水火,兩者不能並存。實際上就是 React 為了要減輕操作瀏覽器 DOM 的負擔,導入了 Virutal DOM 的設計,壓縮程式運行中所有的元件異動,只在最後階段才同步反映到瀏覽器的 DOM 上。JSX 是方便撰寫 React element 的語法蜜糖,而 React element 卻要經過 Babel 這種語法轉譯器的幫助,才能變成真正可運作的 JavaScript 程式碼。這一切的一切都有太多前情提要的背景知識,也難怪 React 不是非常好上手的程式語言。
不過 React 不好學習有另一個關鍵的原因,如果你在網路上查找 React element 的範例程式碼,肯定會找到兩種風格截然不同的東西,class component 和後來的 function component 。 書裡提出許多論證,讓讀者知道 function component 改進、消除了過去 class component 設計上的缺失。這樣的技術改版是不得不然,但這肯定是個容易讓初學者踩雷的誤區,甚至可能白費時間學到過時的 class component 開發技術。單向資料流的 prop 以及 state ,是確保 Virutal DOM 運作能正確無誤的機制,這也連帶著影響了程式碼的開發範型。從鳥瞰的角度來評論,可以說許多 React 特殊的程式碼設計風格與規範,以及搭配運作的 hooks 函式庫,都是為了達成更有效率的 DOM 更新,React 原始設計團隊,將此負擔轉嫁到工程師上,而不是開發出能簡化程式碼的一體適用執行環境。
不論是線上的 React 前端工程師,或是像我這種想對 React 多點瞭解的後端工程師。React思維進化都是值得成為第一本或是唯一一本的 React 技術指南。在擁有書中講解、介紹的背景知識後,讀者們才能更有自信,具備足夠的底氣去學習更進階的,如 Next.js 等 React 框架。而在全書的薰陶之後,即便看到前端工程師同事丟來的程式碼,相信也能略懂略懂的端詊。

