2016-04-20 74 views
0

我目前正在開發一個項目,我們正在爲其開發React/Flux UI。我被告知需要將UI代碼轉換爲GSP並放入Grails項目中,以便與我們的後端一起工作。我覺得將用戶界面遷移到GSP將會使我們的Flux實現(Reflux)失效。React/Flux的Grails項目

我最初的想法是,這是錯誤的,我還沒有發現任何使用Grails和Flux通過搜索。

回答

0

爲什麼使用GSP會使React或Flux失效? GSP只是呈現HTML的服務器端處理語言。最後,我檢查了React和Flux在Javascript中結合了大量的HTML。

你可以一起使用它們,沒有任何問題。如何,取決於你。

0

你被告知錯誤。 GSP是Java servlet。將React與服務器端技術混合的唯一原因是同構應用程序,在這種應用程序中,您可以在返回/推送給客戶端之前編譯JS。在這種情況下,您需要創建類似於基於Rhino的servlet的東西。否則,請像對待任何其他靜態資產一樣對待它。

2

我參與了使用React作爲前端的生產Grails應用程序。沒有必要將React/Flux代碼「轉換」爲GSP,事實上,這很大程度上會犧牲React UI的好處。沒有必要 - Grails非常適合爲React(或Angular或任何其他JS框架)應用程序提供robust Restful backend

根據您的應用程序需要,您可能需要爲前端提供一個平靜的API,以根據需要使用/發佈。使用URLMappings.groovy指定React應用可以訪問的端點。您可能會選擇使用JSON作爲將數據發送到React應用程序的媒介 - Grails' JSON views是將Grails域對象或其他數據呈現爲JSON有效內容的快速,靈活且直接的方法。

關於Flux,不應該有任何關於Grails的指定 - 使用它來在React應用程序中管理和改變你的狀態,也許通過從你的Flux調度器(或動作創建器)向Grails後端調用其他的調用來檢索數據並更新您的Flux商店。

關於GSP,我的建議是簡單地將主控制器的準系統GSP視圖關閉,它只需加載運行React應用程序所需的Javascript。如果您使用的是模塊捆綁像webpack,這可能是因爲你的bundle.js文件鏈接到您的視圖,並提供在頂級組件指定的根元素一樣簡單:

<html> 
<head> 
    <title>My App</title> 
</head> 
<body> 

    <div id="app"></div> 
    <asset:javascript src="bundle.js"/> 

</body> 
</html> 

注意,對於這個工作,您必須將webpack包輸出到grails-app/assets/javascripts,我發現這是在Grails應用程序中加載React應用程序的最簡單方法。使用這種方法,不需要將React,Flux或其他相關庫直接加載到Grails中 - 只需使用標準JS工具鏈(使用npm/package.json來管理依賴關係)構建項目,並將整個應用程序處理/捆綁爲純文本JS包,可以由Grails資產管道加載。

作爲一個以視圖爲中心的Javascript庫,React是一個很好的選擇,它不會對您的後端架構做出很多假設。憑藉基於Grails的穩定的api,以及關於工具和項目結構的一些明智選擇,React非常適合Grails應用程序中的現代單頁Javascript UI。