是的,所以我试图在我的代码中找出在服务器端使用呈现react代码的方法。
当我的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侧呈现很好地结合在一起。然而,现在我遇到了让webpack捆绑代码正确工作的问题,但这是另一个问题,所以我要结束这个问题。
发布于 2016-02-03 18:50:56
有些处理器要求您使用.jsx扩展。
当您使用角度括号符号时,尝试将test.js重命名为test.jsx。
编辑:并在代码中明显地重命名
https://stackoverflow.com/questions/35184488
复制相似问题