отправить HTML-код, отображаемый react в виде тела электронной почты в узле js

#javascript #node.js #reactjs #react-router #isomorphic-javascript

#javascript #node.js #reactjs #react-маршрутизатор #изоморфный-javascript

Вопрос:

У меня есть приложение react. В нем есть две страницы — AddStatus и ViewStatus. Оба являются компонентами react.

Мое требование таково: я должен ежедневно отправлять электронное письмо в определенное время с подробной информацией, как показано на экране ViewStatus.

Я могу настроить node-mailer и node-scheduler для этого. Но как мне визуализировать компонент ViewStatus из серверной части? Как мне получить HTML-код экрана viewStatus.

Я попытался использовать метод renderToString для ReactDOMServer, как показано ниже в моем server.js но получение ошибки

 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, но я не уверен, как запустить маршрут из серверной части.

Как мне получить HTML-код моего компонента viewstatus в моем server.js

Ответ №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.. Ваш код, похоже, в порядке.

Комментарии:

1. Да, этот простой код работает и для меня. Если я просто сделаю это в своем server.js . Но когда я импортирую свой компонент в server.js Я получаю сообщение об ошибке

2. Я могу заставить его работать после того, как я удалил react-hmre, но когда я загружаю свои компоненты, он начинает отказывать в зависимостях. Сначала Jquery, затем я включил jquery в свой server.js (что неверно), но затем он начинает давать сбой из-за того, что документ не определен. Каков правильный способ использования renderToString?