- Published on
Vue.js Created vs Mounted の違いを解説
Vue.jsのCreatedとMounted。どっちを使うのが適切かなど悩むことが多いと思います。 そこで、Vueのライフサイクルでの観点から違いを説明し、 適切な利用シーンを見ることで、大きな違いを解説したいと思います。
結論としては、created
ではvirtualDOMにアクセス・変更できないのに対してmounted
はすでにvirtualDOMがdataと一緒に描画された後なので、アクセス・変更することが可能になっています。
これだけでは分からないと思うので、ライフサイクルから、どのような違いがなぜ生まれているのか解説します。
Vue.jsのライフサイクルから見るcreatedとmountedの違い
違いを知るには全体のライフサイクルを理解する必要があります。 全体のライフサイクルは図の通りでVue.jsはデータを取得して、virtualDOMをレンダー(描画)し、dataが変わると、それを検知してvirutalDOMを再度レンダー(描画)するというライフサイクルになっています。
ライフサイクルの図を見ると、created
が先に呼ばれ、mounted
が後に呼ばれています。
created
が呼ばれた後のbeforeMount
で、VirtualDOM
のテンプレートがコンパイルされ$el
に入ります。
そして、mount
でdata
に紐づくものを描画(render)するというライフサイクルになり、
その後にmounted
が呼ばれます。
これでもう差分はわかったと思います。created
はvirtualDOMが作成される前に呼ばれて、
mounted
はvirtualDOMが作成されてdataが描画された後に呼ばれます。
そのため、created
ではVirtualDOMにアクセス、変更できないのに対してmounted
はすでにVirtualDOMがdataと一緒に描画された後なので、操作、アクセスすることが可能になっています。
createdの適切な利用シーン
virtualDOMが描画される前に動作するので、
APIなどでデータを取ってきてdata
に格納する時などに利用します。
(データの初期化に使います。)
mountedの適切な利用シーン
mounted
はvirutalDOMが描画された後に動作します。
ここでも同じようにAPIなどでデータを取ってきて,data
に格納するのにももちろん使えます。
データの初期化の文脈であれば、それはcreated
の方が適していると言えるでしょう。
さらに、mounted
はdata
をもとにvirtualDOMが描画された後なので、
virtualDOMの要素へのアクセス・変更が可能です。
そのため、描画後にDOM要素へ何かしたい時などはmounted
を使います。
参考: difference-between-the-created-and-mounted-events-in-vue-js