我們來看看與React有關(guān)的軟件包的生態(tài)系統(tǒng)。當(dāng)Facebook構(gòu)建React時,就有許多來自開源社區(qū)的第三方軟件包。為提供完整的應(yīng)用程序體驗,這些軟件包使用React并添加了附加功能。其中幾個中因提供了類似的功能,彼此之間存在競爭。
React Router
成熟的Web應(yīng)用程序共有的一個特點是都提供了多個“路由”,這些“路由”本質(zhì)上是不同的功能塊,在瀏覽器中表示為單獨的URL。React不需要為更簡單的應(yīng)用程序使用路由,有時用在桌面和移動應(yīng)用程序等環(huán)境中,路由也并不是必需的。因此,React Router雖然最受歡迎的React應(yīng)用程序路由解決方案,但流行度卻不及React本身的一半。
React的一部分:通過將自己限制在一個明確定義的問題領(lǐng)域內(nèi),并具有明確定義的接口,使其本身可以應(yīng)用于比原始設(shè)計更廣泛的應(yīng)用范圍。這一決定增加了開發(fā)人員使用和處理React的能力,進一步改進并擴展了他的生態(tài)環(huán)境,創(chuàng)造了一個有益的循環(huán)。這一結(jié)果出乎意料,因為React作為一個局部的解決方案,本質(zhì)上不如Ember和Angular這樣的完整框架使用起來方便。
Flux
一個完整應(yīng)用程序的另一個不通過React的部分就是數(shù)據(jù)層。推出React的同時,F(xiàn)acebook還推出了Flux和GraphQL。兩者都不如React流行,這再次顯示了React在一小部分問題上的解決問題能力。
Flux在React之后不久就被推出,但直到2015年中才與React Router同步漸漸走入大眾的視野,這表明了兩者在網(wǎng)絡(luò)應(yīng)用程序中正在“捆綁”使用。但是,2015年中期之后,它們的軌跡發(fā)生了很大的分化,F(xiàn)lux的歡迎程度緩慢下滑。
Redux
Flux垮臺的一個原因是Redux的崛起。Redux在2015年年中引入了Redux,與Flux在應(yīng)用程序功能上有相同的部分,但不同的是開發(fā)經(jīng)驗,與此同時Flux開始下滑。現(xiàn)在Redux幾乎和React Router一樣流行,而且兩者緊密地相互追隨,并且越來越受歡迎。這表明Redux已經(jīng)取代Flux成為React網(wǎng)絡(luò)應(yīng)用程序中的首選管理狀態(tài)系統(tǒng)。
MobX
MobX是在2016年中推出的Flux和Redux競爭對手。目前它正快速成長,雖然仍然只是這個領(lǐng)域的小玩家,但也值得關(guān)注。
RxJS
RxJS是另一個與Flux和Redux競爭的狀態(tài)管理組件。RxJS的流行趨勢不能用簡單的模式來追蹤或解釋。首先,它有兩個extant版本,一個名為rx的遺留版本和一個名為rxjs的當(dāng)前版本。雖然rx版本目前正在下滑,而rxjs正在上升,但兩者都得有大量使用率。
RxJS似乎是作為其他項目的子依賴項驅(qū)動的,特別是Angular CLI。這意味著所有使用Angular的驅(qū)動器都使用相同的RxJS,也被合并到其他一些流行的命令行工具中。
GraphQL
雖然它與React是同時在Facebook內(nèi)部開發(fā)的,但是GraphQL與React并沒有內(nèi)在的聯(lián)系。它只是Web客戶端查詢服務(wù)器數(shù)據(jù)的一種方式。它通過名為Relay和Apollo的兩個競爭庫得到了一定的普及,這兩個庫提供用于生成GraphQL和管理數(shù)據(jù)流的Web應(yīng)用程序。
首先推出的是Relay,目前正在持續(xù)成長,但是已經(jīng)被半年后發(fā)布的Apollo蓋過了風(fēng)頭。雖然絕對數(shù)量還很小,但Apollo的增長軌跡值得深入挖掘。
React生態(tài)系統(tǒng)總結(jié)
回頭看過去12個月的變化,我們可以看到各個“玩家”在React生態(tài)系統(tǒng)中的位置變化:
* Apollo正在快速增長。
* Flux正在下降。
* React Router和Redux都非常受歡迎,并且有緊密地關(guān)系。
* MobX增長看好,但還沒有危及到Redux的地位。
* React本身是龐大的。