我正在使用react-rails / webpacker开发一个应用程序,带有一个 rails 服务器和 React 前端。除此之外,我们还使用styled-components并覆盖了app/javascript/packs/server_rendering.js文件中现有的ReactRailsUJS.serverRender方法来解释样式化组件,如下所示(参见https://github.com /reactjs/react-rails/issues/864#issue-291728172了解更多信息):
// server_rendering.js
import React from 'react';
import ReactDOMServer from 'react-dom/server';
import { ServerStyleSheet } from 'styled-components';
const componentRequireContext = require.context('components', true);
const ReactRailsUJS = require('react_ujs');
ReactRailsUJS.useContext(componentRequireContext);
ReactRailsUJS.serverRender = function(renderFunction, componentName, props) {
const ComponentConstructor = this.getConstructor(componentName);
const stylesheet = new ServerStyleSheet();
const wrappedElement = stylesheet.collectStyles(
<ComponentConstructor {...props} />
);
const text = ReactDOMServer[renderFunction](wrappedElement);
// prepend the style tags to the component HTML
return `${stylesheet.getStyleTags()}${text}`;
}
这一切都很好,因为作为 ReactRailsUJS.serverRender 函数的第一个参数传递的renderFunction参数是react -dom/server 的 renderToString 方法。但是,我们想更新应用程序以使用renderToNodeStream方法来渲染我们的反应组件,这就是让我参与这个讨论的原因。
我想知道是否有人对这些库如何在更核心的级别上工作有更深入的了解,以帮助我弄清楚在给定我们的应用程序设置的情况下我们如何能够使用 renderToNodeStream。
任何建议/方向表示赞赏,如有必要,我可以提供更多信息。感谢您的考虑和帮助!