【问题标题】:send html rendered by react as email body in node js在节点 js 中将 react 渲染的 html 作为电子邮件正文发送
【发布时间】:2017-02-26 09:12:46
【问题描述】:

我有一个反应应用程序。它有两个页面 - AddStatus 和 ViewStatus。两者都是反应组件。

我的要求是 - 我必须每天在特定时间发送一封电子邮件,其中包含在 ViewStatus 屏幕中看到的详细信息。

我可以设置 node-mailer 和 node-scheduler 来做到这一点。但是我如何从后端渲染 ViewStatus 组件。如何获取 viewStatus 屏幕的 HTML。

我尝试在 server.js 中使用 ReactDOMServer 的 renderToString 方法,如下所示,但出现错误

var App = React.createFactory(require('../ViewStatus'))

var p = ReactDOMServer.renderToString(App());
  Error: locals[0] does not appear to be a `module` object with Hot Module replace
ment API enabled. You should disable react-transform-hmr in production by using
  `env` section in Babel configuration. See the example in README: https://github.
 com/gaearon/react-transform-hmr

我想到的另一种方法是使用 react-router,但我不确定如何从后端触发路由。

如何在 server.js 中获取 viewstatus 组件的 HTML

【问题讨论】:

    标签: javascript node.js reactjs react-router isomorphic-javascript


    【解决方案1】:
    var React = require("react");
    var ReactDOMServer = require("react-dom/server");
    
    var MyComponent = React.createClass({
       render: function() {
          return React.DOM.div({}, "Text");
        }
    });
    
    var App = React.createFactory(MyComponent)
    
    var html = ReactDOMServer.renderToString(App());
    
    console.log("HTML =\n", html);
    

    输出:

    HTML =
     <div data-reactroot="" data-reactid="1" data-react-checksum="-1164111617">Text</div>
    

    对我有用,正如您的错误所说,您的 React Hot Loader 似乎有问题。您的代码似乎没问题。

    【讨论】:

    • 是的,这个简单的代码也适用于我。如果我只是在我的 server.js 中执行此操作。但是当我在 server.js 中导入我的组件时,我收到了错误
    • 我可以在删除 react-hmre 后让它工作,但是当我加载我的组件时,它开始在依赖项上失败。首先 Jquery 然后我在 server.js 中包含 jquery(这是不对的方式)但随后它开始因未定义文档而失败。使用 renderToString 的正确方法是什么?
    猜你喜欢
    • 1970-01-01
    • 2018-05-06
    • 2021-01-24
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    相关资源
    最近更新 更多