精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
React過譽了嗎?


作者|Aphinya Dechalert
譯者|王強
編輯|王文婧
React 過譽了嗎?拋開和 Facebook 的關(guān)系,它確實有“兩把刷子“嗎?

今年年初,我抱著誠懇的態(tài)度嘗試了一下 React。我自己以前是 Angular 用戶,所以在嘗試的過程中對這個庫所展示的理念一直抱有開放的態(tài)度。

剛開始用 React 的感覺很奇怪——這個世界里的所有事物都要以一種特殊的方式來構(gòu)造,其中需要用自動化處理程序來處理數(shù)據(jù)流。涉及到數(shù)據(jù)時,React 總有自己的一套強制單向數(shù)據(jù)流機制。

但這些并不是我放棄 React 的原因——是社區(qū)中那些玻璃心的狂熱信徒讓我受不了的。也許是因為我的 Angular 用戶背景,我會仔細(xì)觀察,在兩者間做出許多對比,結(jié)果引來了這幫人(他們大部分只會用 React),氣勢洶洶地要找我較量。有那么幾個月他們贏了,我撤退到了自己安全的 Angular 世界里。但是最近,我有機會在工作中用上了 React Native,所以想寫一寫自己對這個話題的誠實看法。

這是一個庫

React 是一個庫——而庫必須與其他庫搭配使用才能解決特定問題。React 的問題解決能力主要體現(xiàn)在渲染前端界面和管理經(jīng)常變化的數(shù)據(jù)上。

React 的優(yōu)勢在于單向數(shù)據(jù)流,在面對突變和意外繼承時可以確保高度穩(wěn)定性和可預(yù)測性。React 非常討人喜歡的另一個因素是它處理關(guān)注點分離的方式。它顛覆了傳統(tǒng)的筒倉(silo)方法,也就是將 CSS、JavaScript 和 HTML 分離成單獨的文檔文件,并將它們放在同一個空間中以備處理。

以 Angular 為例,傳統(tǒng)的處理關(guān)注點分離的方式。

需要新事物時的處理方式。這種結(jié)構(gòu)不是 Angular 特有的。

React 中基于關(guān)系的關(guān)注點分離方式。

從理論上講,在 Angular 中也可以實現(xiàn)基于關(guān)系的關(guān)注點分離,但不會像 React 中那樣是默認(rèn)方法,也沒那么直觀。

React 之所以能實現(xiàn)這一目標(biāo),是因為其原則是代碼組件都要維持在足夠小的體積上,從而使這些組件的域和邊界都易于檢測和理解。但這不是硬性規(guī)定,組件的最終大小是由開發(fā)者確定的。

回歸本源

React 的流行主要是因為市面上缺少像樣的起步架構(gòu),人們很需要這種架構(gòu)來上手。React 與 Angular 是不一樣的,在 Angular 中需要用 CLI 來為框架生成必要的設(shè)置,而 React 需要的準(zhǔn)備工作非常少。

但很多人在對比它們的時候都會犯一個錯誤。React 是一個庫,這意味著它體積很小,功能專一,且有針對性。但 Angular 是一個框架,這意味著它是符合同一套規(guī)則的一系列庫的集合。因此,說 Angular 臃腫是不公平的,因為它倆并不是同一類事物。

框架決定了開發(fā)代碼的方式,并充當(dāng)所有關(guān)聯(lián)庫的協(xié)調(diào)者。它根據(jù)一組原則或規(guī)則確保所有部分均按預(yù)期工作。這是必要的,因為當(dāng)你有多個庫需要搭配使用時,為了讓程序平穩(wěn)運行,你需要有某種共同的基礎(chǔ)。

React 不是干這個的。

它從來都不是為這個目標(biāo)設(shè)計的——因為它的唯一目的就是將事物渲染到屏幕上,并讓你的數(shù)據(jù)以干凈的方式連接到 DOM。這就是為什么要將狀態(tài)管理委派給 Redux 的原因。如果你想做的事情不只是處理數(shù)據(jù)和 DOM,就需要找第三方應(yīng)用程序來解決問題。

這也沒錯。這就是 React 的機制,這就是 React 的用途所在。

不能因為它易用,就說它更好

Angular 與 React 的爭論似乎持續(xù)了很長時間。但這本質(zhì)上不是誰更好的問題,而是誰更適合你開發(fā)需求的問題。

我看到很多人最后都會拿出來的論點,就是說 React 是由 Facebook 創(chuàng)造的。但并不是所有事情上 Facebook 的出身都有那么大的意義。是的,它是由 Facebook 創(chuàng)造的,但 React 也不是他們唯一使用的技術(shù)。在他們的后端,也許還有前端,還有其他很多東西。

如果我們要談出身,那么 Angular 與 Google 有關(guān),Java 來自 Oracle,.Net 還是 Microsoft 的心血呢。

需要承認(rèn),React 比 Angular 更容易上手——特別是對于開發(fā)新手來說,他們對前端代碼并沒有清晰的認(rèn)識。他們可能是自學(xué)成才的,或者可能是其他領(lǐng)域經(jīng)驗豐富的工程師轉(zhuǎn)型過來的。不管用戶是什么水平,React 都像是 JavaScript 剛誕生時的樣子——上手很簡單,但是用法幾乎沒什么限制。

React 作為一個庫所面臨的問題是沒有結(jié)構(gòu)上的約束——只有語法的約束。這可能導(dǎo)致應(yīng)用結(jié)構(gòu)松散,缺乏命名約定,文件夾結(jié)構(gòu)(如果有這種東西)隨意混亂,生產(chǎn)部署中還可能打包進去很多冗余文件。

從理論上講,如果你不遵守那些最佳的編程方式,那么做出來的任何事物都可能落得這樣的下場。可是這些最佳方法并沒有在代碼中通過約束固定下來。

你要了解 JavaScript,還有其他知識

React 是 JSX,它是 JavaScript 的一種變體,這意味著你仍然需要了解 JavaScript 的實際機制。React 可能比 Angular 更接近 JavaScript,Angular 在結(jié)構(gòu)上更像是通過 TypeScript 實現(xiàn)類型轉(zhuǎn)換和控件的傳統(tǒng)編程語言。

這就是為什么你需要對 JavaScript 的機制有深入的了解,才能成為一名高水平、高效率的 React 開發(fā)人員。你需要深入研究的還有其他一些事物,其中包括狀態(tài)和數(shù)據(jù)流的概念——因為這是 React 所打交道,并且優(yōu)勢很大的兩大主題。

一旦你從菜鳥階段成長起來,架構(gòu)模式和結(jié)構(gòu)就變得越來越重要。做電商應(yīng)用時,你不能把整個銷售系統(tǒng),包括單品推薦、交叉推薦和歷史購買推薦的代碼都塞進根文件夾里面。

React 的入門教程并不會教這些內(nèi)容。實際上,大多數(shù)在線編程教程并沒有認(rèn)真去講架構(gòu),也不會教你如何實現(xiàn)與框架或庫相關(guān)的元事物。

https://medium.com/better-programming/a-comprehensive-guide-on-the-meta-knowledge-you-need-to-accelerate-your-code-creation-process-d0f5f3b67473

雖然代碼編譯后就沒人能看到這些東西了,但是你的開發(fā)同事或接手你代碼的人是會看到的——如果你的代碼一團糟,改起來要人命,他們會發(fā)瘋的。

React 的優(yōu)點

React 作為一個庫,意味著具有高度可移植性。你隨便把它放在哪里都能正常工作——就像 jQuery 和 Ajax 那樣。有時我們需要做微前端,抑或是處理一些和舊式系統(tǒng)有著密切聯(lián)系的過渡型應(yīng)用,這時 React 的可移植優(yōu)勢就非常有用了。

它與 React Native 的關(guān)系也是一個優(yōu)點,它們改變了漸進式 Web 應(yīng)用的制作方式。與其他基于 JavaScript 的框架(例如 Ionic)不同的是,Ionic 基本上就是打包你的 Angular、Vue 或 React 代碼以生成能發(fā)布到商店的應(yīng)用,而 React Native 則更進一步,會將代碼轉(zhuǎn)換為蘋果和谷歌要求的原生語言。

因此,React Native 不會把網(wǎng)站偽裝成應(yīng)用程序,而是將其轉(zhuǎn)變?yōu)閷嶋H的應(yīng)用程序——從而提供更好的整體性能,以及更好的途徑來訪問設(shè)備上的原生功能(如地圖、指南針、圖像和相機等)。代碼本身還是以 React 為主,但是變成了適應(yīng)各種移動設(shè)備的 React 版本。

React 煩人的部分

作為從 Angular 住民踏入 React 世界的用戶,我最煩 React 的事情之一,就是它缺乏很多常用功能,例如自動數(shù)據(jù)綁定等。而且為了給它開路,你得找來幾乎所有基于 JavaScript 的庫才行。作為對比,Angular 這邊你只要選一個已經(jīng)打包進 Angular 的可用庫即可。你只要記得導(dǎo)入它,然后就萬事大吉!一切都很順利,很正常。但 React 很大程度上要依賴第三方庫,這些庫可能彼此之間看不對眼,或者不能很好地與 React 搭配工作。

在 React 社區(qū)中,關(guān)于組件設(shè)計和組件組織的討論也很少——或者只是我沒找對地方?隨著項目的發(fā)展,你經(jīng)常會發(fā)現(xiàn)自己毫無必要地把狀態(tài)推到樹上面去了,結(jié)果在全局空間造成了意外的污染。一般會用 Redux 來解決這個問題——但是 Redux 并不是 React,前者是一個完全獨立的實體。

結(jié) 語

先聲明一下,這些都只是我個人的看法,都是基于我對這個庫已有的經(jīng)驗。總的來說,React 的社區(qū)非常棒,但我在其中遇到的一些敵意在 Angular 世界中并不那么常見。

那么 React 被過譽了嗎?

這實際上取決于你要與哪些圈子的粉絲打交道,而且什么事物都有自己的怪癖。React 并不是前端解決方案的終極圣杯,但它已經(jīng)做得夠好了,所以非常有用。

當(dāng)我也成長為老一代開發(fā)者,看過了那么多項目花開花謝,我再學(xué)習(xí)新技術(shù)時就不會把它們當(dāng)成已有事物的終極解決方案了,而只會把它們看作是升級更新,并加入到我自己的知識庫里。

React 本身也不是全新的東西。它只是將 JavaScript、HTML 和 CSS 打包在一起的另一種途徑。Angular 剛出來的時候用的也是這種方法,之前的 jQuery 也一樣。

業(yè)界永遠(yuǎn)都在追捧下一個熱點,但最佳方法就是學(xué)習(xí)如何正確地編寫代碼,然后把這件事做好即可——因為不管現(xiàn)在的熱點是什么框架、庫、支架之類花哨的東西,都是無關(guān)緊要的。作為開發(fā)人員,你的水平取決于你能以多快的速度,憑借良好的編程基礎(chǔ)來適應(yīng)當(dāng)前的需求和環(huán)境。

感謝你的閱讀。

原文鏈接:https://medium.com/better-programming/is-react-overrated-c7f8efb75e3e

活動推薦
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Vue和React大比拼,你pick誰?
Angular vs React 最全面深入對比
React、Angular、Vue.js:三者完整的比較指南
React.js 開發(fā)常見問題
Angular vs React vs Vue 三個框架的比較
最佳的 JavaScript 前端框架、庫和工具
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服

主站蜘蛛池模板: 晋宁县| 彩票| 镇宁| 临沭县| 德江县| 巫山县| 宾川县| 禄丰县| 汽车| 宝兴县| 新竹县| 福泉市| 安仁县| 抚顺市| 抚宁县| 博白县| 双鸭山市| 延津县| 武邑县| 曲松县| 鄂托克前旗| 浦东新区| 桑日县| 法库县| 太湖县| 龙江县| 桃江县| 香港 | 丘北县| 平舆县| 临夏市| 龙口市| 昌都县| 洪洞县| 淮南市| 清新县| 唐海县| 汝州市| 西宁市| 白山市| 吉安县|