Vue.jsで作成されたイベントとマウントされたイベントの違い


181

Vue.jsのドキュメントでは、createdおよびmountedイベントについて次のように説明しています。

created

インスタンスの作成後に同期的に呼び出されます。この段階で、インスタンスはオプションの処理を完了しています。つまり、データ監視、計算されたプロパティ、メソッド、監視/イベントコールバックが設定されています。ただし、マウント段階はまだ開始されておらず、$ elプロパティはまだ利用できません。

mounted

インスタンスがマウントされた直後に呼び出され、elは新しく作成されたvm。$ elに置き換えられます。ルートインスタンスがドキュメント内要素にマウントされている場合、mountが呼び出されたときにvm。$ elもドキュメント内になります。

このフックは、サーバー側のレンダリング中には呼び出されません。

理論は理解していますが、実践に関して2つの質問があります。

  1. created使用されるケースはありますmountedか?
  2. created実際の(実際のコード)状況で、何のためにイベントを使用できますか?

13
createdは以前に呼び出されるため、たとえばAPIバックエンドからデータのフェッチをトリガーすることは理にかなっています。
Egor Stambakio 2017

4
確認できます。FullstackVueブックの例はすべてcreated()、api呼び出しのアクションをディスパッチするために使用しています。
チョビー

回答:


255

created():オプションの処理が終了したので、リアクティブdataプロパティにアクセスし、必要に応じて変更できます。この段階では、DOMはまだマウントまたは追加されていません。したがって、ここではDOM操作を行うことはできません

mounted():DOMがマウントまたはレンダリングされた後に呼び出されます。ここでは、DOM要素にアクセスでき、DOM操作を実行できます。たとえば、innerHTMLを取得できます。

console.log(element.innerHTML)

だからあなたの質問:

  1. Is there any case where created would be used over mounted?

Createdは通常、バックエンドAPIからデータをフェッチし、それをデータプロパティに設定するために使用されます。しかし、SSR mounted()フックには存在しないため、作成されたフックのみでデータをフェッチするなどのタスクを実行する必要があります

  1. What can I use the created event for, in real-life (real-code) situation?

レンダリングする必要のある初期データ(JSONなど)を外部APIからフェッチし、それを反応データプロパティに割り当てる場合

data:{
    myJson : null,
    errors: null
},
created(){
    //pseudo code
    database.get().then((res) => {
        this.myJson = res.data;
    }).catch((err) => {
        this.errors = err;
    });
}

6
作成されたAPI呼び出しを行うとき、すべての非同期操作が完了するのを待ってから、次のライフサイクルステージに進みますか?
Ominus

10
@Ominusいいえ、待機しません。このfiddle- jsfiddle.net/1k26sqrx/を実行し、コンソールログを確認してください
Vamsi Krishna

1
created()の代わりにMounted()が使用されていることに気付きました。Vueは、反応変数セットが実際に反応変数として存在するかどうかをテストします。そうでない場合、エラーがスローされます。これは、created()の場合とは異なります。 "プロパティまたはメソッド" foo "はインスタンスで定義されていませんが、レンダリング中に参照されます。このプロパティがリアクティブであることを確認してください。"
Rob Juurlink
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.