1
2

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.

【Vue.js】コンポーネントを動的に切り替える時とその注意点【動的コンポーネント】

Posted at

#前提
コンポーネントを複数用意した際の切り替え方。
その際注意すること。

  • __House__コンポーネント
  • __Content__コンポーネント
  • 親コンポーネント : App.vue

今回は__二つ__子コンポーネントを用意。
ボタンを押すことで二つの__コンポーネントを切り替える__ことができる。

__House__コンポーネント

House.vue
<template>
  <div>
    <p>House</p>
  </div>
</template>

__Content__コンポーネント

Content.vue
<template>
  <div>
    <p>Content</p>
    <input type="text">
  </div>
</template>

<script>
export default {
  destroyed() {
    console.log('destoryed');
  }
}
</script>

__親__コンポーネント

App.vue
<template>
  <div>
    <button @click="currentComponent = 'Content'">Content</button>
    <button @click="currentComponent = 'House'">House</button>
    <keep-alive>
      <component :is="currentComponent"></component>
    </keep-alive>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentComponent: 'House',
    };
  },
}
<script>

##コンポーネントの切り替え
###keep-alive

  • __keep-alive__タグ
  • __component__タグ
  • v-bind:is(:is)

keep-alive__のなかに__component__を__ネスト
componentの中で__v-bind:is__を使って__プロパティを指定__すると完成。

App.vueではcurrentComponentプロパティにコンポーネントを値として挿入しているが、
__直接指定__も可能。

App.vue
//直接指定

<component :is="House"></component>
<component :is="Content"></component>

##ライフサイクルフック
###ライフサイクル

  • activated
  • deactivated

__keep-alive__を使用することによって__新たなライフサイクル__が二つ追加される。

  • created
  • destroyed

この二つをイメージするとわかりやすい。


###注意点

__異なる点__として、__毎回インスタンス化されない__ため、実際にcreatedやdestroyedされているわけではない。

そのため、inputなどに入力したデータは切り替え後も消えずに残る

##参照
udemy講座 : https://www.udemy.com/course/vue-js-complete-guide/learn/lecture/15371400#content
講師 : よしぴー(Yoshipi)さん

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?