洗練されたフレームワークを使用してコンポーネントを作成する方法を学んでいます。しかし、js ファイルにロードしたコンポーネントから 1 つのコンポーネントのみのインスタンスを作成できませんでした。
だから、これは私のhtmlファイルです:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script src="./build/ReviewPanelComponent.js"></script>
</body>
</html>
私のjs入力ファイル(コンポーネントをインポートする場所):
import ReviewPanel from './ReviewPanel.html';
const reviewPanel = new ReviewPanel({
target: document.querySelector( 'body' ),
data:
JSON.parse(localStorage.getItem('rooms'))
});
export default {
components: {
reviewPanel,
}
}
そして、コンポーネントの html:
<style>
#main{
background-color:white;
}
h3,
h4,
h5{
font-weight: bold;
}
</style>
<div class="container">
<div class="row">
<div id="main" class="col-xs-12">
<div id="title">
{{#if BookedRooms.length > 0}}
{{#each BookedRooms as br}}
<h3>{{br.Title}}</h3>
{{#each br.PossibleRateTypes as prt}}
<h4>{{prt.UUID}}</h4>
{{/each}}
{{/each}}
{{/if}}
</div>
</div>
</div>
</div>
したがって、この時点で、js 入力ファイルにインスタンスがあるため、コンポーネントがロードされます。現時点で、2 つ目のインスタンスが必要な場合は、js ファイル自体の 1 つを作成する必要があります。私は、必要なすべてのコンポーネントをjsファイルにインポートし、それらを使用したいhtmlファイルにインポートするだけのように考えていました。
これは可能ですか?ドキュメントを読んでいますが、必要なものが見つかりません。
編集:私もwebpackを使用していると言うのを忘れていました。したがって、入力ファイルと出力ファイル。複数のコンポーネントを使用することができました。私が見つけた解決策は、js入力ファイルでこれを行うことでした:
import ReviewPanel from './ReviewPanel.html';
window.ReviewPanel=ReviewPanel;
window.ReviewPanel2=ReviewPanel;
インポートしたオブジェクトをグローバル変数に入れて、次のように、必要な場所で呼び出すことができるようにします。
<div id="reviewPanel"></div>
<script type="text/javascript">
// Creates the review panel component
window.ReviewPanel = new ReviewPanel({
target: document.querySelector('#reviewPanel'),
data:
JSON.parse(localStorage.getItem('rooms'))
});
</script>
それでも、私はこの解決策を持っていますが、グローバルオブジェクトに依存することなく、js入力ファイルに一度だけインポートしてから、必要な場所で次のように呼び出すだけです。
// And passing the parameters
<ReviewPanel />
React.js についてはあまり見たことがありませんが、プログラマーがこれを行っているのを一般的に見ている方法です。私は同じことを期待していました。それでも、他にやらなければならないことがあるので、後で最適化するために、今のところこのままにしておきます。
それでも、誰かがこれを行う方法を知っていれば、私はすべて耳です。私は Svelte を初めて使用し、ドキュメントを除いてあまり情報がないため、同じ部分で少し混乱していると思います.