Ich bin neu bei isomorphem Javascript, also bitte mit ertragen. Ich verwende Gulp in Verbindung mit Babelify, mit Presets es2015, stage0, und reagiere auf einem Express-Server.Elementtyp ist ungültig: erwartet eine Zeichenfolge (für eingebaute Komponenten) oder eine Klasse/Funktion (für zusammengesetzte Komponenten) aber habe: Objekt
Meine Komponente, script.js:
var React = require('react');
var ReactDOM = require('react-dom');
export class Son extends React.Component {
render() {
return (
<div>
<h3>Bleh</h3>
<p>
Paragraph 1
</p>
</div>
);
}
}
if(typeof window !== 'undefined') {
ReactDOM.render(
<Son />,
document.getElementById('s1')
);
}
Meine Strecken, index.js:
let React = require('react');
let ReactDOMServer = require('react-dom/server');
let express = require('express');
let router = express.Router();
import Son from '../public/javascripts/script';
// let Son = require('../public/javascripts/script').default;
console.log(Son);
/* GET home page. */
router.get('/', function(req, res, next) {
let testString = ReactDOMServer.renderToString(<Son />);
res.render('index', {
title: 'Express',
react: testString
});
});
module.exports = router;
Gulp und nodemon sind beide transpiling/Kompilieren in Ordnung. Die console.log-Ausgabe von Son
erzeugt ein Null-Objekt: {}
. Das Problem ist hier der Export/Import des Moduls; Wenn ich die Klassendeklaration in das Modul routes kopiere und einfüge, ändert sich die Ausgabe in [Function: Son]
und die App läuft wie beabsichtigt. Ich habe die anderen Posts darüber gelesen, wie man mit dem Import von Modulen umgeht, und habe alle Lösungen ausprobiert (einschließlich der herkömmlichen es5-Syntax von module.exports =
und require(...).default
), aber keines hat funktioniert. Jedenfalls wäre es wunderbar, wenn ich dieses Konzept mit es6 richtig nageln könnte.
Ich habe versucht, was Sie vorgeschlagen, aber keine Würfel. Am Ende habe ich ein paar Tests gemacht, indem ich versucht habe, das übertragene Modul aus einer Testdatei im selben Ordner zu verlangen, nur um sicher zu gehen, dass meine Pfade korrekt waren. Ich habe festgestellt, dass der Konstruktor der reagierenden Komponente den Sprung nicht gemacht hat, obwohl der gesamte Code darin ausgeführt wurde. Am Ende habe ich meine Komponente in pure es5 umgeschrieben, wobei meine kompilierte Routendatei von dieser Quelle importiert wurde. Golden. Es stellte sich heraus, dass der gulp/babel transpile den Export irgendwie vermasselt. –