让一些路由由 Groovy 处理,一些由 react-router v4 处理
Letting some routes be handled by Groovy and some by react-router v4
我正在使用的代码在后端 Groovy 代码中有控制器,这些代码呈现 GSP(Groovy 服务器页面)。对于前端,我们使用 react-router v4 来处理路由。我遇到的问题是,通过在 react-router 中定义路由,它不允许浏览器从后端获取任何内容,并且不会呈现组件(因为模板是在该路由的后端定义的而不是在前端)。
例如:
<button onClick={() => this.props.history.push('/somethingThatShouldBeRenderedByTheFrontend')}>Render from the frontend</button>
<button onClick={() => this.props.history.push('/somethingThatShouldBeRenderedByTheBackend')}>Render from the backend</button>
并且当 "Render from the frontend" 被点击时,应该呈现 "FrontendReactComponent",但是当 "Render from the backend" 被点击时,它应该让 Groovy 控制器调用 "XYZ" 应该被击中,这又会呈现 GSP 页面。我找不到合适的术语来在线研究这个问题。任何人都知道我可以搜索什么,或者我可以如何解决这个问题?
编辑: 在此处找到有关此问题的更多信息(以及解决方案):
没有简单的解决方法可以解决您要尝试做的事情。如您所见,React 路由器只能处理加载的前端应用程序的状态(即浏览器的状态、加载的脚本等)
如果你需要让后端渲染一个全新的页面,你不能只推送状态(到前端路由器组件),你需要基本上将浏览器导航到一个新的URL 这将使它重新获取页面——即使这看起来与浏览器的位置字段和历史记录非常相似,但它是一个非常不同的东西,因为它将重新加载所有客户端脚本和状态。
还要考虑这些 URL 如何作为书签工作 - 您必须确定后端应该处理哪些 URL,哪些应该只加载客户端应用程序然后导航到请求的组件。
我会做一些不同的事情:如果你 - 对于某些页面 - 需要在服务器端呈现大量 HTML ,为此制作一个控制器,但没有页眉和页脚:基本上制作一个"back-end mirror" React 组件将从服务器获取所需的 HTML 并将其呈现为(使用 innerHtml 属性)。
我正在使用的代码在后端 Groovy 代码中有控制器,这些代码呈现 GSP(Groovy 服务器页面)。对于前端,我们使用 react-router v4 来处理路由。我遇到的问题是,通过在 react-router 中定义路由,它不允许浏览器从后端获取任何内容,并且不会呈现组件(因为模板是在该路由的后端定义的而不是在前端)。
例如:
<button onClick={() => this.props.history.push('/somethingThatShouldBeRenderedByTheFrontend')}>Render from the frontend</button>
<button onClick={() => this.props.history.push('/somethingThatShouldBeRenderedByTheBackend')}>Render from the backend</button>
并且当 "Render from the frontend" 被点击时,应该呈现 "FrontendReactComponent",但是当 "Render from the backend" 被点击时,它应该让 Groovy 控制器调用 "XYZ" 应该被击中,这又会呈现 GSP 页面。我找不到合适的术语来在线研究这个问题。任何人都知道我可以搜索什么,或者我可以如何解决这个问题?
编辑: 在此处找到有关此问题的更多信息(以及解决方案):
没有简单的解决方法可以解决您要尝试做的事情。如您所见,React 路由器只能处理加载的前端应用程序的状态(即浏览器的状态、加载的脚本等)
如果你需要让后端渲染一个全新的页面,你不能只推送状态(到前端路由器组件),你需要基本上将浏览器导航到一个新的URL 这将使它重新获取页面——即使这看起来与浏览器的位置字段和历史记录非常相似,但它是一个非常不同的东西,因为它将重新加载所有客户端脚本和状态。
还要考虑这些 URL 如何作为书签工作 - 您必须确定后端应该处理哪些 URL,哪些应该只加载客户端应用程序然后导航到请求的组件。
我会做一些不同的事情:如果你 - 对于某些页面 - 需要在服务器端呈现大量 HTML ,为此制作一个控制器,但没有页眉和页脚:基本上制作一个"back-end mirror" React 组件将从服务器获取所需的 HTML 并将其呈现为(使用 innerHtml 属性)。