私は Yii2 プロジェクトをセットアップしました。Facebook の JavaScript フレームワークReact.jsを使用することにしました。このフレームワークは、 JSXと呼ばれる JavaScript コード内で HTML テンプレートを宣言する便利な方法を提供します。
私の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 '<'
レンダリング時に .jsx ファイルがtext/jsx
スクリプト要素のタイプを持つ必要があることを AssetBundle で指定する方法はありますか?