Jak poradzić sobie bez globalnego stanu?

0

Powiedzmy, że w SPA (sklep internetowy, ehh) mam widok ze szczegółami produktu. Chciałbym pokazać w osobnym widoku recenzje klientów tego produktu (ważne jest, że nie mogę pokazać ich w widoku ze szczegółami produktu). Pytanie: czy w widoku z recenzjami musi być jakiś nagłówek w stylu Recenzje produktu: :nazwa? Po kątem UX powinien być, tylko że to oznacza wykonanie drugiego zapytania do API po dane produktu (i trzeciego po powrocie do widoku ze szczegółami), bo te komponenty (szczegóły produktu, recenzje) nie mają wspólnego rodzica, w którym można by przechować współdzielone dane. Jak można uniknąć wykonywania tych dodatkowych zapytań do API bez używania menadżera stanu? Zakodować nazwę produktu w url?

0

Nie rozumiem problemu. W czym ci ten globalny stan przeszkadza?

Pomijając już fakt, że SPA to zuo.

0
Freja Draco napisał(a):

Pomijając już fakt, że SPA to zuo.

Rozwiniesz myśl? Zupełnie serio pytam

0
AnyKtokolwiek napisał(a):
Freja Draco napisał(a):

Pomijając już fakt, że SPA to zuo.

Rozwiniesz myśl? Zupełnie serio pytam

Była o tym dyskusja:
Czemu SPA (Single Page Application) to zło?
SPA ma tak wady jak i zalety. Zalety IMHO głównie z punktu widzenia serwera.

3

A czemu endpoint, który zwraca recenzje (zakładam na podstawie id produktu) nie może zawierać tych danych np.

GET /products/1/reviews

{
   "productId": 1,
   "productName": "iPhone 11 Pro",
   "reviews": [
       {}, {}, {}, ...
   ]
}

Wtedy masz tylko jeden strzał bez pytania kolejny raz o szczegóły.

0

@lookacode1: Można, ale jakoś dziwnie mi to wygląda, bo endpoint sugeruje, że zostanie zwrócona lista recenzji. Czy może tak się faktycznie robi na co dzień?

1
nobody01 napisał(a):

@lookacode1: Można, ale jakoś dziwnie mi to wygląda, bo endpoint sugeruje, że zostanie zwrócona lista recenzji. Czy może tak się faktycznie robi na co dzień?

Tak się robi ewentualnie w każdej z recenzji możesz umieścić nazwę produktu, którego ona dotyczy np.
jakbyś potrzebował wyświetlać osobno każdą z recenzji.

0

A co jeśli miałbym paginację, filtrowanie, wyszukiwanie? Wtedy przy każdym żądaniu czytane i pobierane byłyby niepotrzebne dane (produktu).

  1. Powinny wtedy być dwa endpointy? /api/products/:id/views/with-reviews (do pobrania danych produktu i pierwszej strony recenzji przy pierwszym żądaniu, a właściwie to drugim, bo już po przejściu do widoku z recenzjami) i /api/products/:id/reviews (do paginacji, filtrowania, wyszukiwania).
  2. Może jednak ten mój pomysł z pobraniem nazwy produktu z urla ma sens?

EDIT: Nieważne, za dużo kombinowania. Spróbuję zrobić to na jednym widoku przy jakimś *ngIf="view === 'reviews'".

2

W pobieranie nazwy z urla nie chcesz iść, otwiera to potencjalna drogą do wstrzyknięcia czegoś, już nie wspominając zabaw z kodowaniem pomiędzy dozwolonym zestawem znaków w url a w aplikacji.

Co do tego czy robić jeden endpoint czy dwa, jeśli Ci ten mały overfetching przeszkadza (musisz żyłować wydajność) idź w dwa, jak nie, zostań przy jednym, jak to mówi stare przysłowie, kod którego udało się uniknąć napisania to najlepszy kod, bo jego utrzymanie mało kosztuje :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1