Jaka jest główna różnica między metodą a wartością obliczoną w Vue.js?
Wyglądają tak samo i są wymienne.
javascript
methods
vue.js
vuejs2
computed-properties
Bootstrap4
źródło
źródło
Odpowiedzi:
Obliczone wartości i metody są bardzo różne w Vue i zdecydowanie nie można ich stosować zamiennie w większości przypadków.
Obliczona właściwość
Bardziej odpowiednią nazwą obliczanej wartości jest obliczona właściwość . W rzeczywistości, gdy tworzona jest instancja Vue, obliczone właściwości są konwertowane na właściwość Vue za pomocą metody pobierającej, a czasem ustawiającej. Zasadniczo można myśleć o wartości obliczonej jako o wartości pochodnej, która będzie automatycznie aktualizowana za każdym razem, gdy zaktualizowana zostanie jedna z bazowych wartości używanych do jej obliczenia. Nie wywołujesz obliczonego i nie akceptuje żadnych parametrów. Odwołujesz się do obliczonej właściwości, tak jak do właściwości danych. Oto klasyczny przykład z dokumentacji :
Do którego odwołuje się DOM w ten sposób:
Obliczone wartości są bardzo cenne przy manipulowaniu danymi istniejącymi w Twoim Vue. Ilekroć chcesz przefiltrować lub przekształcić dane, zazwyczaj będziesz używać do tego celu wartości obliczonej.
Obliczone wartości są również zapisywane w pamięci podręcznej, aby uniknąć wielokrotnego obliczania wartości, która nie musi być ponownie obliczana, gdy nie uległa zmianie (na przykład może nie znajdować się w pętli).
metoda
Metoda to po prostu funkcja powiązana z instancją Vue. Zostanie on oceniony tylko wtedy, gdy wyraźnie go nazwiesz. Podobnie jak wszystkie funkcje javascript akceptuje parametry i będzie ponownie oceniana za każdym razem, gdy zostanie wywołana. Metody są przydatne w tych samych sytuacjach, w których każda funkcja jest przydatna.
Dokumentacja Vue jest naprawdę dobra i łatwo dostępna. Polecam to.
źródło
Ponieważ @gleenk poprosił o praktyczny przykład pokazujący różnice w pamięci podręcznej i zależnościach między metodami i obliczonymi właściwościami, pokażę prosty scenariusz:
app.js
Tutaj mamy 2 metody i 2 obliczone właściwości, które wykonują to samo zadanie. Metody
addToAmethod
iaddToBmethod
oraz obliczone właściwościaddToAcomputed
iaddToBcomputed
wszystkie add +20 (czyliage
wartość) alboa
albob
. W odniesieniu do metod, są one zarówno nazywany każdym razem, gdy czynność została wykonana na dowolny z wymienionych właściwości, nawet jeśli Zależności dla konkretnej metodzie jeden nie uległy zmianie. W przypadku obliczonych właściwości kod jest wykonywany tylko wtedy, gdy zmieniła się zależność; na przykład jedna z określonych wartości właściwości, które odnoszą się do A lub B, wyzwoli odpowiednioaddToAcomputed
lubaddToBcomputed
.Metoda i obliczone opisy wydają się dość podobne, ale ponieważ @Abdullah Khan już je określił , nie są tym samym ! Teraz spróbujmy dodać trochę kodu HTML, aby wykonać wszystko razem i zobaczyć, gdzie jest różnica.
Demo przypadku metody
Wyjaśniony wynik
Kiedy klikam przycisk „Dodaj do A” , wywoływane są wszystkie metody (zobacz powyższy wynik na ekranie dziennika konsoli),
addToBmethod()
jest również wykonywany, ale nie nacisnąłem przycisku „Dodaj do B” ; wartość właściwości odnosząca się do B nie uległa zmianie. To samo zachowanie pojawia się, gdy zdecydujemy się kliknąć przycisk „Dodaj do B” , ponieważ ponownie obie metody zostaną wywołane niezależnie od zmian zależności. Zgodnie z tym scenariuszem jest to zła praktyka, ponieważ za każdym razem wykonujemy te metody, nawet jeśli zależności nie uległy zmianie. To naprawdę pochłania zasoby, ponieważ nie ma pamięci podręcznej dla wartości właściwości, które nie uległy zmianie.Prezentacja przypadku właściwości obliczonej
Wyjaśniony wynik
Kiedy klikam przycisk „Dodaj do A” ,
addToAcomputed
wywoływana jest tylko obliczona właściwość, ponieważ, jak już powiedzieliśmy, obliczone właściwości są wykonywane tylko wtedy, gdy zmieniła się zależność. A ponieważ nie nacisnąłem przycisku „Dodaj do B” i wartość właściwości wieku dla B nie uległa zmianie, nie ma powodu, aby wywoływać i wykonywać obliczoną właściwośćaddToBcomputed
. Zatem, w pewnym sensie, obliczona właściwość zachowuje „tę samą niezmienioną” wartość właściwości B jak rodzaj pamięci podręcznej. W tej sytuacji należy to uznać za dobrą praktykę .źródło
Z
docs
Jeśli chcesz, aby dane były buforowane, użyj właściwości obliczonych, z drugiej strony, jeśli nie chcesz, aby dane były buforowane, użyj prostych właściwości metody.
źródło
Jedna z różnic między wyliczonymi a metodą. Załóżmy, że mamy funkcję, która zwraca wartość licznika (licznik jest po prostu zmienną). Spójrzmy, jak zachowuje się funkcja zarówno w przypadku metody obliczeniowej, jak i metody
Obliczone
Przy pierwszym wykonaniu kod wewnątrz funkcji zostanie wykonany, a vuejs zapisze wartość licznika w pamięci podręcznej (w celu szybszego dostępu). Ale kiedy ponownie wywołasz funkcję vuejs, nie wykona ponownie kodu zapisanego w tej funkcji. Najpierw sprawdza wszelkie zmiany wprowadzone w liczniku, czy nie. Jeśli wprowadzono jakiekolwiek zmiany, tylko wtedy ponownie wykona kod, który jest wewnątrz tej funkcji. Jeśli nie ma żadnych zmian w liczniku, vuejs nie będzie ponownie wykonywał funkcji. Po prostu zwróci poprzedni wynik z pamięci podręcznej.
metoda
Jest to normalna metoda w javascript. Za każdym razem, gdy wywołujemy metodę, zawsze wykona kod wewnątrz funkcji, niezależnie od zmian wprowadzonych w liczniku.
Metoda zawsze wykonuje ponownie kod niezależnie od zmian w kodzie. gdzie zgodnie z obliczeniami ponownie wykona kod tylko wtedy, gdy zmieni się jedna z wartości jego zależności. W przeciwnym razie da nam poprzedni wynik z pamięci podręcznej bez ponownego wykonywania
źródło
Oto podział tego pytania.
Kiedy używać metod
Kiedy używać obliczonych właściwości
źródło
Obliczone właściwości
Obliczone właściwości są również nazywane wartością obliczoną. Oznacza to, że aktualizują się i można je zmienić w dowolnym momencie. Ponadto buforuje dane, dopóki się nie zmienią. Po utworzeniu wystąpienia Vue obliczone właściwości są konwertowane na właściwość.
Jeszcze jedna rzecz, którą chcę się podzielić, nie możesz przekazać żadnego parametru w obliczonych właściwościach, dlatego podczas wywoływania dowolnej właściwości komputera nie jest wymagany nawias.
Metody
Metody są takie same jak funkcje i działają w ten sam sposób. Poza tym metoda nic nie robi, chyba że ją nazwiesz. Ponadto, podobnie jak wszystkie funkcje javascript, akceptuje parametry i będzie ponownie oceniana za każdym razem, gdy zostanie wywołana. Po tym nie mogą buforować wartości
W metodzie wywołującej nawias jest tam i możesz wysłać jeden lub więcej parametrów.
źródło
Natknąłem się na to samo pytanie. Dla mnie jest to bardziej jasne:
v-on directive
po którym następuje metoda, wie dokładnie, którą metodę i kiedy wywołać.v-on directive
niej, będzie wywoływana za każdym razem, gdy na stronie zostanie wyzwolone zdarzenie, które aktualizuje DOM (lub po prostu wymaga ponownego renderowania części strony). Nawet jeśli ta metoda nie ma nic wspólnego z wyzwalanym zdarzeniem.this
słowo w definicji funkcji.Na wynos jest to, że najlepszą praktyką jest użycie
computed
właściwości w przypadku, gdy metoda nie jest wywoływana z rozszerzeniemv-on directive
.źródło