この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:guest
更新日時:2026-06-11 07:29:05

タイトル: Mixinを利用した共通処理の記述方法
SEOタイトル: 【Vue.js】Mixinを利用した共通処理の記述方法

この本文には実行可能なタグ等が含まれるため、安全のためHTMLソースとして表示しています。本文データは変更していません。

<table border="1" cellpadding="1" cellspacing="1" style="width:1000px">
	<thead>
		<tr><th style="background-color:#f39c12;color:#ffffff;text-align:left">この記事の要点</th></tr>
	</thead>
	<tbody>
		<tr>
			<td style="background-color:#fef9e7">
			<ul>
				<li>Vue.js の <strong>Mixin</strong>: 複数コンポーネントで<strong>共通処理を流用</strong>する仕組み</li>
				<li>共通処理を別ファイル (<code>Common.vue</code>) に <code>export default {...}</code> で書く</li>
				<li>使う側で <code>import Common from "./Common.vue"</code> → <code>mixins: [Common]</code> を宣言</li>
				<li>Vue 3 は<strong>Composition API(<code>useXxx()</code> 関数)</strong>のほうが推奨される</li>
			</ul>
			</td>
		</tr>
	</tbody>
</table>

<p>&nbsp;</p>



<h2>共通の処理</h2>

<p>共通処理用のvueファイルを作成して以下の様に共通化したい処理を記述する。</p>

<p>内容はなんでもよい。</p>

<table border="1" cellpadding="1" cellspacing="1" style="width:500px">
	<thead>
		<tr>
			<th scope="col" style="background-color:#ffffff"><span style="color:#e74c3c">Common.vue</span></th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="background-color:#000000"><span style="color:#ffffff"><script><br />
			&nbsp; &nbsp; export default {<br />
			&nbsp; &nbsp; &nbsp; &nbsp; created() {<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.getMessages()<br />
			&nbsp; &nbsp; &nbsp; &nbsp; },<br />
			&nbsp; &nbsp; &nbsp; &nbsp; data() {<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return {<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; messages: [],<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
			&nbsp; &nbsp; &nbsp; &nbsp; },<br />
			&nbsp; &nbsp; &nbsp; &nbsp; methods: {<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getMessages() {<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axios<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .get('/api/message/list')<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .then(res => &nbsp;{<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.messages = res.data<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br />
			&nbsp; &nbsp; &nbsp; &nbsp; }<br />
			&nbsp; &nbsp; }<br />
			</script></span><br />
			&nbsp;</td>
		</tr>
	</tbody>
</table>

<p>&nbsp;</p>

<h2>共通処理を呼び出す処理</h2>

<p><span style="color:#e74c3c"><strong>mixins</strong></span>を使用して引数に共通処理のファイルを指定する。</p>

<table border="1" cellpadding="1" cellspacing="1" style="width:500px">
	<thead>
		<tr>
			<th scope="col" style="background-color:#ffffff"><span style="color:null">Example.vue</span></th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="background-color:#000000">
			<p><span style="color:#ffffff"><script><br />
			&nbsp; &nbsp; </span><span style="color:#2ecc71">import Common from './Common.vue'</span></p>

			<p><span style="color:#ffffff">&nbsp; &nbsp; export default {<br />
			&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color:#f1c40f">mixins</span><span style="color:#ffffff">: [</span><span style="color:#2ecc71">Common</span><span style="color:#ffffff">],<br />
			&nbsp; &nbsp; &nbsp; &nbsp; created() {<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.getChannelsTest()<br />
			&nbsp; &nbsp; &nbsp; &nbsp; },<br />
			&nbsp; &nbsp; &nbsp; &nbsp; data() {<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return {<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; channels: [],<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
			&nbsp; &nbsp; &nbsp; &nbsp; },<br />
			&nbsp; &nbsp; &nbsp; &nbsp; methods: {<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getChannelsTest() {<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axios<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .get('/api/channels/test')<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .then(res => &nbsp;{<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.channels = res.data<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })<br />
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br />
			&nbsp; &nbsp; &nbsp; &nbsp; }<br />
			&nbsp; &nbsp; }<br />
			</script></span></p>
			</td>
		</tr>
	</tbody>
</table>

<p>&nbsp;</p>

<h2>共通処理を呼び出す処理を省略する方法</h2>

<p>全ての処理で使う場合は<span style="color:#e74c3c"><strong>main.js</strong></span>で指定すればよい。</p>

<p>そうすれば各コンポーネント内で呼び出す必要もなくなる。</p>

<table border="1" cellpadding="1" cellspacing="1" style="width:500px">
	<thead>
		<tr>
			<th scope="col">main.js</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td style="background-color:#000000">
			<p><span style="color:#2ecc71">import Common&nbsp;from './Common.vue'</span></p>

			<p><span style="color:#f1c40f">Vue.mixin(</span><span style="color:#2ecc71">Common</span><span style="color:#f1c40f">)</span></p>

			<p><span style="color:#ffffff">new Vue({<br />
			&nbsp; el: '#app',<br />
			&nbsp; router,<br />
			&nbsp; render: h => h(App),<br />
			})</span></p>
			</td>
		</tr>
	</tbody>
</table>