如何在Yii2资产捆绑包中使用JSX文件
How to use JSX file in Yii2 Asset Bundle
我已经设置了Yii2项目,我决定使用Facebook的JavaScript框架React.js,它提供了一种在JavaScript代码中声明HTML模板的方便方法,称为JSX。
我的JavaScript如下所示:
(function () {
'use strict';
MyBlock = React.createClass({
getInitialState: function () {
return {data: []};
},
componentDidMount: function () {
$.ajax({
url: '/api/',
dataType: 'json',
success: function (data) {
this.setState({ data: data });
}.bind(this)
});
},
render: function () {
<div class="block">
{this.props.variable}
</div>
}
});
React.render(
<ProfileQuestion />,
document.getElementById('profile_question_wrapper')
);
}());
AssetBundle帮助我在视图中包含所需的库,因此我将React.JS和JSX文件从CDN添加到AssetBundle:中
class MyAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
];
public $js = [
'//fb.me/react-0.13.1.min.js',
'//fb.me/JSXTransformer-0.13.1.js',
'js/app.jsx',
];
public $depends = [
'app'assets'AppAsset'
];
}
然而,当它在我的页面底部添加脚本时,它显示为
<script src="/js/app.jsx"></script>
并且没有将脚本的类型标记为text/jsx
,因此JSX转换库不识别JSX语法,.JSX文件解释为简单的JavaScript,在JSX样式上抛出语法错误消息。
SyntaxError: Unexpected token '<'
有没有任何方法可以在AssetBundle中指定.jsx文件在呈现时脚本元素中的类型应为text/jsx
?
您需要使用两个资产来执行此操作您可以将属性传递给js文件的script标记。然而,它将被传递到JS数组中的所有文件,因此您需要有两个资产类。像这个
class MyAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
];
public $js = [
'//fb.me/react-0.13.1.min.js',
'//fb.me/JSXTransformer-0.13.1.js',
];
public $depends = [
'app'assets'AppAsset'
];
}
二级
class JSXAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $js = [
'js/app.jsx',
];
public jsOptions = ['type'=>'text/jsx'];
public $depends = [
'app'assets'MyAsset'
];
}
并将第二类包含在您的视图中。jsOptions调用View::registerjsFile函数,该函数又调用Html类Here中的jsFile辅助函数。如果没有特别定义,这些选项将作为脚本标记属性
相关文章:
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 如何在Facebook上的iframe应用程序中使后退按钮返回到上一页
- 有没有办法限制Meteor-alded表格包中已发布的字段
- 如何在Yii2资产捆绑包中使用JSX文件
- 在选项卡中使用时,Onsen UI拉钩会抛出错误
- 如何在Angularjs中重构闭包中的重复代码
- 如何在d3力布局中使直线而不是曲线
- 如何冻结函数's在闭包中的变量
- 如何在angular中使构造函数之外的服务可用
- 局部变量在闭包中丢失
- 如何在KendoDropDownList中使项目不可点击(项目将可见)
- 只有当alert()在带有AJAX的internet explorer中使用时,Javascript才会更新UI
- 闭包中的Javascript值
- javascript,将参数传递给函数内部的闭包中的回调
- 如何在javascript画布中使一个矩形位于所有其他矩形之上
- 如何在Meteor中使每个环境都不那么不同
- PHP 的显式变量在闭包中使用时的优势
- 如何在Meteor包中包含JavaScript,使其's未在客户端中转换
- 闭包中的Javascript实例化.如何使工厂和模型独立
- 为什么if-else条件在react jsx中使用时不起作用