VM.PL

Vuex vs Pinia: Rozwiązanie do zarządzania stanem dla Vue 3

/ 21.06.2023
Artykuły

Vue.js, jeden z najpopularniejszych frameworków JavaScript, przeszedł dużą aktualizację wraz z wydaniem Vue 3. W tym artykule zbadamy niektóre z kluczowych funkcji tej nowej wersji i podkreślimy korzyści, jakie przynosi w rzeczywistych projektach. Ponadto przyjrzymy się bliżej bibliotekom do zarządzania stanem Pinia i Vuex ,aby sprawdzić jakie rozwiązania do zarządzania stanem zapewnia każda z nich. 

Co nowego w Vue 3? 

Vue 3 jest oficjalnie nową wersją Vue od 7 lutego 2022 roku i z miejsca został ogłoszony jako mniejsza, szybsza i łatwiejsza w utrzymaniu alternatywa dla Vue 2. Aktualizacja poprawia kilka wad Vue 2 takich, jak złożony i mało czytelny kod oraz wprowadza nowsze funkcje do frameworka.  Poniżej omawiamy zmiany, które wyraźnie poprawiły elementy znane z Vue 2: 

⦁ Composition API, czyli zwiększona elastyczność  

Ten interfejs API ułatwia programistom dzielenie złożonych komponentów na funkcje logiczne wielokrotnego użytku, ułatwiając zrozumienie i utrzymanie baz kodu. Dzięki temu programiści mogą grupować powiązane ze sobą funkcje, w celu lepszego ponownego wykorzystania kodu. Funkcja ta umożliwia szybszy rozwój i łatwiejsze testowanie komponentów. 

⦁ Lepsza wydajność  

Vue 3, jest oparty na Proxy API, dzięki czemu oferuje szybciej i wydajniej reaguje dzięki optymalizacji renderowania wirtualnego DOM, co ułatwia dokonywanie częstych aktualizacji.  

⦁ Mniejszy rozmiar pakietu 

Nowy kompilator w Vue 3 generuje bardziej zoptymalizowany kod, zmniejszając ogólny rozmiar pakietu aplikacji, co skutkuje szybszym ładowaniem i lepszą wydajnością. 

⦁ Fragmenty:  

Vue 3 wprowadza koncepcję “fragmentów”, dzięki czemu możemy mieć wiele elementów głównych w komponencie bez konieczności stosowania elementu opakowującego. Upraszcza to kompozycję komponentów i ułatwia strukturyzację szablonów. 

⦁ Teleport:  

Nowy komponent Teleport w Vue 3 umożliwia renderowanie zawartości komponentu w innej lokalizacji DOM, na przykład przeniesienie modelu na koniec treści dokumentu. Jest to przydatne do tworzenia nakładek, podpowiedzi i innych komponentów, które muszą być pozycjonowane względem głównego dokumentu.

⦁ Custom Renderer API: 

Vue 3 udostępnia nowe API Custom Renderer, które umożliwia tworzenie niestandardowych rendererów dla różnych platform lub środowisk. Otwiera to takie możliwości korzystania z Vue jak renderowanie po stronie serwera (SSR), natywne aplikacje mobilne i inne. 

⦁ Obsługa języka TypeScript:  

Vue 3 zapewnia lepszą i bardziej rozbudowaną integrację TypeScript. Nowy system reagowania  i Composition API w Vue 3 zostały zaprojektowane do płynnej współpracy z TypeScript, oferując dokładniejsze typowanie i sprawdzanie reguł. 

Zarządzanie stanem w VUE 3  

Zrozumienie potrzeby zarządzania stanem w Vue 3 jest niezbędne, szczególnie w przypadku dużych aplikacji. Cały proces odnosi się do zarządzania i organizacji danych aplikacji, które muszą być współdzielone przez wiele komponentów. Im bardziej złożona jest aplikacja, tym bardziej rośnie jej złożoność zarządzania stanem. W tym miejscu pomocne narzędzia w optymalizacji tego procesu są niezbędne, takie jak Vuex, czy Pinia.

Wyzwania związane z zarządzaniem stanem bez dedykowanego rozwiązania.

W dużych aplikacjach Vue często występuje znaczna ilość współdzielonego stanu, który musi być dostępny i modyfikowany przez różne komponenty. Jeśli nie stosujemy rozwiązania do zarządzania stanem, jego obsługa może być trudna i prowadzić do różnych problemów. Niektóre z wyzwań związanych z zarządzaniem stanem bez dedykowanego rozwiązania obejmują: 

⦁ Props Drilling: W Vue komponenty komunikują się ze sobą za pomocą rekwizytów i zdarzeń. Gdy wiele komponentów potrzebuje dostępu do tego samego elementu stanu, konieczne staje się przekazanie go w dół przez wiele poziomów zagnieżdżonych komponentów, co jest znane jako props drilling. Może to sprawić, że baza kodu stanie się znacznie bardziej złożona i trudniejsza w utrzymaniu. 

⦁ Tight Coupling: Udostępnianie stanu bezpośrednio między komponentami może skutkować sprzężeniem, w którym komponenty stają się zależne od siebie nawzajem pod względem struktury i szczegółów implementacji.  Utrudnia to modyfikację lub refaktoryzację komponentów bez wpływu na inne części aplikacji. 

⦁ Centralized State: W ramach współdzielenia stanu między komponentami popularnym zjawiskiem jest użycie zmiennych globalnych lub samej instancji Vue. Chociaż działa to w przypadku małych aplikacji, wraz z rozwojem bazy kodu staje się coraz bardziej problematyczne. Zmienne globalne mogą prowadzić do konfliktów nazewnictwa, utrudniać sprawdzanie, gdzie używany jest stan i nie mają scentralizowanego sposobu zarządzania jego mutacjami. 

Czym jest Vuex? 

Aby sprostać powyższym wyzwaniom, w Vue 2.0 wprowadzono Vuex. Jest to oficjalny wzorzec do zarządzania stanem, funkcjonuje jako samodzielna aplikacja z następującymi częściami: 

⦁ Stan – źródło prawdy, które napędza naszą aplikację 

⦁ Widok – deklaratywne odwzorowanie stanu 

⦁ Działania – możliwe sposoby zmiany stanu w reakcji na dane wejściowe użytkownika z widoku 

Vuex reprezentuje koncepcję jednokierunkowego przepływu danych, w którym stan jest przechowywany w pojedynczym scentralizowanym źródle prawdy zwanym "store’m" i jest dostępny dla komponentów w razie potrzeby.  

Vuex ma dojrzały ekosystem, obszerną dokumentację i szerokie wsparcie społeczności. Oferuje funkcje takie jak gettery, mutacje, akcje i moduły, dzięki czemu nadaje się do zarządzania złożonym stanem i obsługi operacji asynchronicznych.

 

 

Doskonale nadaje się do aplikacji na dużą skalę z wieloma komponentami, które muszą uzyskiwać dostęp do współdzielonego stanu i modyfikować go. 

Podsumowując, Vuex oferuje następujące korzyści: 

⦁ Scentralizowany stan: Dzięki Vuex cały współdzielony stan jest przechowywany w jednej scentralizowanej lokalizacji zwanej "store". Ułatwia to zrozumienie i zarządzanie danymi aplikacji, ponieważ wszystkie mutacje stanu są wykonywane w spójny i przewidywalny sposób. 

⦁ Wyraźny przepływ danych: Vuex wymusza wyraźny przepływ danych, umożliwiając komponentom dostęp do stanu tylko poprzez predefiniowane gettery i modyfikowanie stanu tylko poprzez mutacje.  

⦁ Mutacje i akcje: Vuex zapewnia mechanizm hermetyzacji mutacji stanu w ramach mutacji i operacji asynchronicznych w ramach akcji. Ta separacja zagadnień pomaga w efektywnym organizowaniu i testowaniu bazy kodu. 

⦁ Integracja z DevTools: Vuex płynnie integruje się z Vue DevTools, zapewniając potężne możliwości debugowania. Programiści mogą sprawdzać stan w dowolnym momencie, odtwarzać zmiany stanu i śledzić sekwencję działań. 

Czym jest Pinia i dlaczego jest potrzebna? 

Pinia to biblioteka zarządzania stanem zaprojektowana specjalnie dla Vue 3. Oferuje lekkie i intuicyjne podejście do zarządzania stanem aplikacji. Dzięki temu programiści mogą tworzyć i organizować store’y hermetyzując stan i logikę aplikacji w scentralizowanym module. Umożliwia nam współdzielenie stanu pomiędzy elementami i stronami. Tworzy przyjazny dla użytkownika, wykorzystując nową koncepcję reagowania w Vue3.  

Niektóre z korzyści jakie daje Pinia: 

⦁ Composition API wprowadzonego w Vue 3, dzięki czemu jest w pełni kompatybilna z projektami Vue 3. Interfejs API Composition pozwala programistom tworzyć bardziej skalowalne i łatwe w utrzymaniu bazy kodu, co przekłada się na większą produktywność i łatwiejszą współpracę w zespołach. 

⦁ TypeScript ułatwia wychwytywanie problemów związanych z systemem typów podczas programowania. Ulepszony system reagowania zapewnia lepszą wydajność, unikając niepotrzebnego ponownego renderowania. 

 ⦁ Podejście modułowe, umożliwia definiowanie wielu store’ów, które mogą być używane niezależnie lub razem. 

 ⦁ Oferuje funkcje takie jak akcje, gettery i mutacje, podobne do Vuex, ale z prostszą składnią i ulepszoną obsługą TypeScript. 

Używanie Pinii jest zalecane dla nowych aplikacji, ponieważ jest bardzo lekka, dodatkowo integruje się z innymi narzędziami Vue.js.  Pinia jest również modułowa w projekcie, nieskomplikowana i przyjazna dla użytkownika. Zawiera wszystkie narzędzia niezbędne do dynamicznego programowania w Vue3. 

Vuex & Pinia – co lepiej zastosować w Vue 3? 

Porównując Pinia i Vuex największą różnicą między tymi dwiema bibliotekami jest to, że Pinia jest bardziej modułowa, a Vuex ma jeden Central Store, który pozwalał modułom rozdzielić aplikację na różne części.  Pinia pozwala teraz każdemu z tych modułów stać się własnym store’m, a następnie można zaimportować każdy store tam, gdzie jest to potrzebne wewnątrz aplikacji. 

Podczas gdy Vuex nadal jest niezawodną i szeroko stosowaną opcją do zarządzania stanami w Vue 3, Pinia coraz częściej jest preferowanym wyborem dla wielu programistów. Ścisła integracja z interfejsem API Composition, obsługa języka TypeScript, lepsza wydajność, modułowa architektura i płynna integracja z DevTools sprawiają, że jest to atrakcyjna opcja, szczególnie w przypadku projektów, w których priorytetem jest organizacja kodu, skalowalność i bezpieczeństwo typów. Ostatecznie wybór między Vuex i Pinia zależy od konkretnych wymagań i preferencji aplikacji Vue 3.

 

 

Kiedy wybrać Vuex a kiedy Pinia? 

Wybór pomiędzy Vuex i Pinia zależy od wielu czynników: 

⦁ Wersja Vue: Jeśli używasz Vue 2, Vuex jest naturalnym wyborem, ponieważ jest to oficjalnie zalecane rozwiązanie do zarządzania stanem. W przypadku projektów Vue 3, Pinia jest dobrze dopasowana do Composition API i zapewnia nowoczesne podejście do zarządzania stanem. 

⦁ TypeScript: Chociaż Vuex również obsługuje TypeScript, Pinia zapewnia płynniejszą integrację z TypeScript. 

⦁ Złożoność projektu: Jeśli przewidujesz, że Twoja aplikacja będzie miała złożone potrzeby w zakresie zarządzania stanem, w tym moduły, wtyczki i oprogramowanie pośredniczące, dojrzały ekosystem Vuex i szerokie wsparcie społeczności mogą być korzystne. Vuex był testowany przez lata i ma szeroką gamę dostępnych rozszerzeń i narzędzi. 

⦁ Znajomość biblioteki przez deweloperów: Jeśli ty lub członkowie twojego zespołu macie wcześniejsze doświadczenie z Vuex lub preferujecie jego API i przepływ pracy, pozostanie przy Vuex może być wygodniejsze. Znajomość i doświadczenie mogą odgrywać znaczącą rolę w szybkości rozwoju i konserwacji. 

Podsumowanie 

Ważne jest, aby pamiętać, że zarówno Pinia, jak i Vuex są zdolnymi rozwiązaniami do zarządzania stanem, a wybór między nimi zależy od konkretnych potrzeb i preferencji aplikacji Vue. Używanie Vuex do małych i średnich projektów Vue.js jest niepotrzebne, ponieważ jego waga w dużym stopniu przyczynia się do zmniejszenia wydajności. Najczęściej Vuex stosuje się w dużych i bardzo złożonych projektach.  

Doświadczenie pokazuje, że dzięki niewielkiej wadze Pinia nadaje się do zastosowań na małą i średnią skalę. Wykorzystując funkcje tego narzędzia, programiści mogą usprawnić organizację kodu, poprawić reagowanie i zapewnić bezpieczeństwo kodu w swoich aplikacjach. Niezależnie od tego, czy rozpoczynasz nowy projekt, czy migrujesz z Vuex, Pinia okazuje się cennym narzędziem w uproszczeniu zarządzania stanem.

Design, Development, DevOps czy Cloud - jakiego zespołu potrzebujesz, aby przyspieszyć pracę nad swoimi projektami?

Porozmawiaj ze specjalistami, aby porozmawiać o swoich potrzebach.

Jakub Orczyk
Członek zarządu / Dyrektor sprzedaży
VM.PL
Zamów bezpłatną konsultację
Jakub Orczyk

Blog

/ Więcej wpisów na blogu

Umówmy się na spotkanie!

Z przyjemnością odwiedzimy Cię w Twoim biurze. Pozwoli nam to osobiście przedyskutować możliwości i korzyści współpracy.

Jeśli chcesz się z nami umówić na spotkanie, zostaw wiadomość. Skontaktujemy się z Tobą w celu ustalenia dogodnego terminu.

* Prosimy wypełnić wszystkie obowiązkowe pola.
Umówmy się na spotkanie!