Różnica między utworzonymi i zamontowanymi zdarzeniami w Vue.js


181

Dokumentacja Vue.js opisuje zdarzenia createdi mountedw następujący sposób:

created

Wywoływane synchronicznie po utworzeniu instancji. Na tym etapie instancja zakończyła przetwarzanie opcji, co oznacza, że ​​skonfigurowano: obserwację danych, obliczone właściwości, metody, wywołania zwrotne watch / event. Jednak faza montażu nie została rozpoczęta, a właściwość $ el nie będzie jeszcze dostępna.

mounted

Wywoływana po zamontowaniu instancji, w której el jest zastępowany przez nowo utworzoną maszynę vm. $ El. Jeśli instancja główna jest podłączona do elementu w dokumencie, vm. $ El będzie również w dokumencie po wywołaniu zamontowania.

Ten punkt zaczepienia nie jest wywoływany podczas renderowania po stronie serwera.

Rozumiem teorię, ale mam 2 pytania dotyczące praktyki:

  1. Czy jest jakiś przypadek, w którym createdzostanie użyty mounted?
  2. Do czego mogę wykorzystać to createdwydarzenie w sytuacji z życia wziętego (rzeczywistego kodu)?

13
createdjest wywoływana wcześniej, więc sensowne jest na przykład wywołanie pobierania danych z zaplecza API.
Egor Stambakio

4
Potwierdzam, wszystkie przykłady w książce Fullstack Vue służą created()do wysyłania akcji dla wywołań API.
chovy

Odpowiedzi:


255

created(): ponieważ przetwarzanie opcji zostało zakończone, masz dostęp do datawłaściwości reaktywnych i możesz je zmienić, jeśli chcesz. Na tym etapie DOM nie został jeszcze zamontowany ani dodany. Więc nie możesz tutaj dokonywać żadnych manipulacji DOM

mounted(): wywoływana po zamontowaniu lub wyrenderowaniu DOM. Tutaj masz dostęp do elementów DOM i manipulację DOM można wykonać na przykład get the innerHTML:

console.log(element.innerHTML)

Więc twoje pytania:

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

Utworzony jest zwykle używany do pobierania danych z zaplecza API i ustawiania go na właściwości danych. Ale w mounted()haku SSR nie ma, musisz wykonywać zadania, takie jak pobieranie danych tylko w utworzonym haku

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

Do pobierania wszelkich początkowych danych wymaganych do renderowania (takich jak JSON) z zewnętrznego interfejsu API i przypisywania ich do dowolnych właściwości danych reaktywnych

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

6
Czy podczas tworzenia wywołania interfejsu API czeka na zakończenie wszystkich operacji asynchronicznych przed przejściem do następnego etapu cyklu życia?
Ominus

10
@Ominus nie, to nie czeka, uruchom to fiddle- jsfiddle.net/1k26sqrx/] i sprawdź dzienniki konsoli
Vamsi Krishna

1
Zauważyłem, że kiedy mount () jest używany zamiast created (). Vue sprawdza, czy zestaw zmiennych reaktywnych rzeczywiście istnieje jako zmienna reaktywna. Jeśli nie, generowany jest błąd. Tak nie jest w przypadku created () "Właściwość lub metoda" foo "nie jest zdefiniowana w instancji, ale odwołuje się do niej podczas renderowania. Upewnij się, że ta właściwość jest reaktywna."
Rob Juurlink
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.