2016-04-20 78 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。