栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有Java和ReactJS服务器端渲染的微服务UI前端

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有Java和ReactJS服务器端渲染的微服务UI前端

问题

如何在Web API网关上的服务器端渲染期间聚合ReactJS UI组件。

使用像Mustache这样的模板框架来注入每个ReactJS组件服务器端的渲染HTML输出,然后将此HTML提供回客户端。

Github回购https://github.com/damorton/dropwizardheroku-
webgateway

服务器端

我在Web
API网关上实现的解决方案首先从微服务请求JSON数据,然后呈现ReactJS组件,同时从注入微服务的JSON数据

Props
。一旦我将完全渲染的ReactJS组件的数据作为HTML字符串,我就使用Mustache模板将完全渲染的ReactJS组件HTML注入Mustache模板,然后将其返回给客户端。

WebGatewayResource.java

@GET@Produces(MediaType.TEXT_HTML)public IndexView index() throws IOException {    // Get events json data from Events microservice    ApiResponse events = getEventsJsonData();    // Render the Events component and pass in props    @SuppressWarnings("unchecked")    List<Object> eventsProps = (List<Object>) events.getList();    String eventsComponent = this.nashornController.renderReactJsComponent(kEventsUiComponentRenderServerFunction, eventsProps);    IndexView index = new IndexView(eventsComponent);    return index;}

注意:
Dropwizard在Mustache模板周围执行了许多魔术操作,因此所需要做的只是创建一个

index.mustache
文件,并在构造
IndexView
类时引用此文件。将其返回
View
给客户端告诉Dropwizard渲染视图并返回HTML。

索引胡子

<!DOCTYPE html><html><head><meta charset="UTF-8" /><title>Dropwizard Heroku Event Service</title><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/react/15.5.4/react.min.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/react/15.5.4/react-dom.min.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/react/15.5.4/react-dom-server.min.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.24.0/babel.min.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.16.1/axios.min.js"></script></head><body>  <h1>Events</h1>  <div id="events">{{{eventsComponent}}}</div>  <script type="text/javascript" src="assets/js/bundle.js"></script>  <script type="text/javascript" src="assets/js/client.js"></script></body></html>

客户端

在客户端,要修复客户端和服务器端渲染的HTML因在最初安装该组件时ReactJS组件的支持不可用而导致HTML不同而导致的问题,当页面加载以请求JSON时将调用javascript函数来自网关的数据。

client.js

var loadEventsFromServer = function(eventsUrl) {    axios.get(eventsUrl).then(function(res) {        var data = res.data.list;    renderClientEvents(data);    });};loadEventsFromServer('https://domain.webapigateway.com/events');

ReactJS

装入组件时不会重新渲染客户端HTML,React知道来自服务器端渲染的现有HTML,并且仅在装入每个组件时为其添加事件侦听器。这使得React可以分别更新其组件,并且还可以利用服务器端渲染。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406651.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号