Grails Project with React/Flux



我目前正在做一个项目,我们正在为我们开发一个React/Flux UI。有人告诉我,UI代码需要转换为GSP并放入Grails项目中,以便与我们的后端一起使用。我觉得将 UI 移动到 GSP 中会使我们的 Flux 实现(Reflux)的使用无效。

我最初的想法是这是错误的,我没有通过搜索找到Grails和Flux的任何用途。

我参与了一个使用 React 作为前端的生产 Grails 应用程序。没有必要将 React/Flux 代码"转换"为 GSP - 事实上,这将在很大程度上牺牲 React UI 的好处。没有必要 - Grails非常适合为React(或Angular或任何其他JS框架)应用程序提供健壮的Restful后端。

根据您的应用程序需求,您可能希望为前端提供一个 restful API,以便根据需要使用/发布。使用 URLMappings.groovy 指定 React 应用可以访问的终结点。您可能会选择使用JSON作为将数据发送到React应用程序的媒介 - Grails的JSON视图是一种快速,灵活和直接的方法,可以将Grails域对象或其他数据渲染为JSON有效负载。

关于 Flux 不应该有任何 Grails

特定的内容 - 使用它来管理和改变 React 应用程序中的状态,也许是通过从 Flux 调度程序(或操作创建者)到 Grails 后端进行 rest 调用来检索数据并更新您的 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 的可靠 restful api,以及一些关于工具和项目结构的智能选择,React 非常适合 Grails 应用程序中的现代单页 Javascript UI。

为什么使用 GSP 会使 React 或 Flux 的使用无效?GSP 只是一种呈现 HTML 的服务器端处理语言。最后,我检查了React和Flux在与Javascript结合使用时充分利用了HTML的大量内容。

您可以将它们一起使用而不会出现任何问题。如何,取决于你。

你被告知错了。GSP是Java servlet。将 React 与服务器端技术混合的唯一原因是为了同构应用程序,您可以在将其返回/推送到客户端之前编译 JS。在这种情况下,您需要创建类似于基于 Rhino 的 servlet 的东西。否则,请像对待任何其他静态资产一样对待它。

最新更新