javascript — JSX и v8js — неожиданный токен & lt;

Правильно, поэтому я пытаюсь решить изломы в моем коде для работы с рендерингом кода JSX реакции на стороне сервера.

Когда мой test.js как следует:

var CommentBox = React.createClass({displayName: 'CommentBox',
render: function() {
return (
React.createElement(
'div',
{className: "commentBox"},
"Hello, world! I am a CommentBox.")
);
}
});

Следующий код работает:

    $react_source = implode("\n", [
file_get_contents(\Yii::getAlias("@bower").'/react/react.js'),
file_get_contents(\Yii::getAlias("@bower").'/react/react-dom-server.js'),
]);

$react_app = implode("\n", [
file_get_contents(\Yii::getAlias("@app").'/web/test/test.js')
]);

$react = array();
// stubs, react
$react[] = "var console = {warn: function(){}, error: print}";
$react[] = "var global = global || this, self = self || this, window = window || this";
$react[] = $react_source;
$react[] = "var React = global.React";
$react[] = "var ReactDOMServer = global.ReactDOMServer";
$react[] = $react_app;

$concatenated = implode(";\n", $react);

$v8 = new \V8Js();

$v8->executeString($concatenated);

$js = $v8->executeString(sprintf("ReactDOMServer.renderToString(React.createElement(%s))", 'CommentBox'));

return $this->render('index', [
'js' => $js
]);

Но когда мой test.js выглядит следующим образом:

var CommentBox = React.createClass({
render: function() {
return (
<div className="commentBox">
Hello, world! I am a CommentBox.
</div>
);
}
});

Я получаю следующую ошибку: V8Js::compileString():18861: SyntaxError: Unexpected token <

Теперь я предполагаю, что это потому, что код JSX должен быть скомпилирован в код javascript (рабочая версия), но как мне сделать это на стороне сервера с PHP?

УСПЕХ … Вид
Так что мне удалось заставить это работать. Я использовал babel для преобразования файла из jsx в обычный js, который выглядит как мой оригинальный рабочий код. Все это прекрасно работает с рендерингом на стороне PHP. Тем не менее, сейчас у меня возникают проблемы с корректной работой связанного кода веб-пакета, но это еще одна проблема, поэтому я собираюсь это закрыть.

0

Решение

Некоторые процессоры требуют использования .jsx расширение.

Попробуйте переименовать test.js в test.jsxкогда вы используете угловую скобку.

РЕДАКТИРОВАТЬ: И переименовать в вашем коде, очевидно,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]