首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSX和v8js -意外令牌<

JSX和v8js -意外令牌<
EN

Stack Overflow用户
提问于 2016-02-03 18:09:00
回答 1查看 932关注 0票数 0

是的,所以我试图在我的代码中找出在服务器端使用呈现react代码的方法。

当我的test.js如下所示:

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

以下代码起作用:

代码语言:javascript
复制
    $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看起来如下所示时:

代码语言:javascript
复制
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捆绑代码正确工作的问题,但这是另一个问题,所以我要结束这个问题。

EN

回答 1

Stack Overflow用户

发布于 2016-02-03 18:50:56

有些处理器要求您使用.jsx扩展。

当您使用角度括号符号时,尝试将test.js重命名为test.jsx

编辑:并在代码中明显地重命名

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35184488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档