0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【学習記録⑧】動的コンポーネントを用いてコンポーネントを入れかえる。

Posted at

#はじめに
Vue.jsを最近勉強し始めたので学んだ文法などを備忘録としてメモしていこうと思います。
今回の記事では動的コンポーネントを用いてコンポーネントを入れかえる方法を記載します。

##componentタグを利用する
動的にコンポーネントを入れかえる場合はcomponentタグを用いると便利です。
記法は以下の通りでisという属性を用いて任意のコンポーネントを指定します。

App.vue
<template>
  <component v-bind:is="任意のコンポーネント名"></component>
</template>

###注意点
しかしながらコンポーネントを入れかえた際に切り替わる前のデータは消えてしまうため、フォームに使用するタグinputtextarea等を利用する場合にはkeep-aliveコンポーネントを用いる必要があります。

App.vue
<template>
  <keep-alive>
    <component v-bind:is="任意のコンポーネント名"></component>
  </keep-alive>
</template>

###ライフサイクルフック
上記で記載したkeep-aliveコンポーネントで囲んだコンポーネントではactivateddeactivatedというライフサイクルフックが呼び出されます。
activatedは対象のコンポーネントがアクティブになったときに動き、deactivatedは対象のコンポーネントが非アクティブになったときに動きます。

##以上を用いてサンプルを作ってみる
以上をふまえて、それらを利用した簡単なサンプルを作ってみます。
今回は「おはようボタン」「こんにちはボタン」を作り、それらのボタンを押すとそれぞれのコンポーネントが出力されるという感じにしたいと思います。
ライフサイクルフックの動きも見ておきたかったので、「こんにちはコンポーネント」がアクティブになった場合と非アクティブになった場合にアラートが呼び出されるようにしてみました。

App.vue
<template>
  <div>
    <button @click="greetComponent = 'Morning'">おはようコンポーネント</button>
    <button @click="greetComponent = 'Afternoon'">こんにちはコンポーネント</button>
    <keep-alive>
      <component v-bind:is="greetComponent"></component>
    </keep-alive>
  </div>
</template>

<script>
import Morning from "./components/Morning.vue";
import Afternoon from "./components/Afternoon.vue";

export default {
  data() {
    return {
      greetComponent: "Morning",
    };
  },
  components: {
    Morning,
    Afternoon,
  },
};
</script>
Morning.vue
<template>
  <div>おはよう!</div>
</template>
Afternoon.vue
<template>
  <div>こんにちは!</div>
</template>

<script>
export default {
  activated() {
    alert("こんにちはコンポーネントが開きました!");
  },
  deactivated() {
    alert("こんにちはコンポーネントが閉じました。");
  },
};
</script>

##結果
デフォルトはおはようコンポーネントが出力されるようにしています。
pic4.png

「こんにちはコンポーネント」ボタンをクリックするとライフサイクルフックのactivatedが呼び出されていることが分かります。
pic1.png

アラートを閉じた後、コンポーネントがこんにちはコンポーネントに変更されていることが分かります。
pic2.png

次に「おはようコンポーネント」ボタンをクリックするとライフサイクルフックのdeactivatedが呼び出されていることが分かります。
pic3.png

アラートを閉じた後、コンポーネントがおはようコンポーネントに変更されていることが分かります。
pic4.png

#おわりに
今回は動的にコンポーネントを入れかえる方法を学びました。
これがSPAを作る上での基礎なのかな・・・と思ったり。

だいぶ楽しいフィールドへ入ってきた感じがするので引き続きしっかり学んでいこうと思います!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?