Obteniendo el siguiente error al usar Nashorn para renderizar un componente ReactJS
Error: Invariant Violation: renderToString(): You must pass a valid ReactElement.
componente.js
var Controller = React.createClass({ render: function() { return (React.createElement("div",null,"Hello, World!")); } }); var renderEventsComponentServer = function (eventList) { return React.renderToString(Controller); };Desde Java
Object html = nashorn.invokeFunction("renderEventsComponentServer", events);
Sin embargo, esto funciona bien
var renderEventsComponentServer = function (eventList) { return React.renderToString(React.createElement("div",null,"Hello, World!")); };con resultado
<div data-reactid=".19jt6qowty6" data-react-checksum="-706801283">Hello, World!</div>
Obviamente me falta algo fundamental sobre cómo funciona ReactJS/Nashorns.
Estos son los archivos JS que se están cargando
nashorn.eval(read("assets/js/react.js")); nashorn.eval(read("assets/js/react-dom.js")); nashorn.eval(read("assets/js/babel.min.js")); nashorn.eval(read("assets/js/axios.js")); nashorn.eval(read("assets/js/nashorn-polyfill.js")); nashorn.eval(read("assets/js/events.js"));Utilizando
return React.renderToString(React.createElement(Controller, null));
en vez de
return React.renderToString(Controller);
Hizo el truco.
componente.js
var Controller = React.createClass({ render: function() { return (React.createElement("div",null,"Hello, World!")); } }); var renderEventsComponentServer = function (eventList) { return React.renderToString(React.createElement(Controller, null)); };Nugget de información:
Cuando comencé a intentar usar ReactJS con Nashorn para SSR, descargué la última versión de ReactJS que arrojaba muchos errores, algunas obsolescencias que se eliminaron por completo. Ahora estoy usando 0.13.1 que parece funcionar como se esperaba.