Open Arsenicro opened 2 years ago
Występuje wyłącznie dla wygody w definiowaniu ścieżki. Zmieniłem nazwę importu, by element stał się czytelniejszy.
https://github.com/Lerqiu/FOODE/blob/b4a55d4e3a5551e845ca81128b7ec3ba1b3e8309/frontend/src/components/Offers/Pagination/ProductsOffersPagination.tsx#L19 Ograniczamy tu maksymalną liczbę wyborów stron na pasku paginacji. Poprawiłem nazewnictwo.
Rozumiem że jeśli backend zwróci totalPages jako -1, 0 i 1 to stron jest zawsze 1? Bardziej adekwatnie byłoby powiedzieć że jeśli nie mamy przynajmniej jednej strony to mamy ich null i obsłużyć jakoś inaczej empty state, niż pokazywać że stron mamy jedną (ale to jest uwaga bardziej stylistyczna niż funkcjonalna).
Z serwera otrzymujemy informację o ilości stron składający się na rekord (0 dla pustego zbioru) oraz komponent material UI wymaga liczby (dobrze prezentuje się dla >= 1). Ponieważ przez cały czas życia dysponujemy liczbą, stwierdziłem, że to będzie łatwiejsze/ładniejsze.
To rzeczywiście nie musi być funkcją.
Ograniczamy tu maksymalną liczbę wyborów stron na pasku paginacji. Poprawiłem nazewnictwo.
Nadal nie rozumiem po co to jest. Jeśli pageCount nie może być większy niż 10 (nie wiem czemu tak miałoby być, co jeśli będzie więcej rekordów?), to nie powinno być opcji ustawienia tego na coś większego niż 10. W tym momencie pageCount może rosnąć do dużych liczb, ale liczba stron nadal będzie maksymalnie 10, co jest bardzo nieintuicyjne
Rozumiem że jeśli backend zwróci totalPages jako -1, 0 i 1 to stron jest zawsze 1? Bardziej adekwatnie byłoby powiedzieć że jeśli nie mamy przynajmniej jednej strony to mamy ich null i obsłużyć jakoś inaczej empty state, niż pokazywać że stron mamy jedną (ale to jest uwaga bardziej stylistyczna niż funkcjonalna).
Z serwera otrzymujemy informację o ilości stron składający się na rekord (0 dla pustego zbioru) oraz komponent material UI wymaga liczby (dobrze prezentuje się dla >= 1). Ponieważ przez cały czas życia dysponujemy liczbą, stwierdziłem, że to będzie łatwiejsze/ładniejsze.
Tak, ale gubicie tą informację cemu tu jest 0. Jeśli backend zwrócił 0 albo -1 to znaczy że mamy jakąś niestandardową sytuację, coś poszło nie tak. Ustawienie tego na null
ma więcej sensu. Tak, musimy wtedy zadbać przy renderowaniu o to, żeby to była odpowiednia liczba, ale wtedy mamy więcej opcji bez konieczności robienia refactoru. Możemy np. nie wyświetlać paginacji wcale, albo wyświetlić jakiś specjalny "pusty stan" paginacji. W tym momencie gubicie informację że coś poszło nie tak, na rzecz tego żeby gdzieś dalej, w jakimś potomku tego komponentu, napisać o jedną linijkę mniej. Takie kombinacje, jeśli już się dzieją, powinny się dziać w komponencie który ich potrzebuje (w tym przypadku komponent Paginacji), bo wtedy za dwa miesiące jak usiądziesz do kodu będziesz mógł łatwo coś zmienić (np jeśli za dwa miesiące ktoś ci każe nie pokazywać paginacji jeśli był błąd)
Navbar_AppBar
to nie jest już do końcastyles
co sugeruje prefix nazwy. To już jest rzeczywisty komponent. W przyszłości może okazać się mylące, że plik nazwanystyles
zawiera coś co jest komponentem. Możliwe że chodziło o rozdzielenie odpowiedzialności i trzymanie stylów osobno, ale teraz i tak tego nie robicie: w tym pliku są wykorzystywane funkcje i komponenty które nie mają zbyt dużo wspólnego ze stylowaniem.onClick
, nic więcej nie sugeruje że wynikiem będzie funkcja. Lepszą nazwą pewnie byłobygetOnChangeSubSiteFunction
czy coś podobnego - coś co już na etapie czytania tej funkcji sugeruje, co ona robi i do czego służy.changeSubSite
sugeruje funkcję, która coś robi, a nie funkcję, która zwraca coś, co trzeba wywołać.totalPages
jako-1
,0
i1
to stron jest zawsze1
? Bardziej adekwatnie byłoby powiedzieć że jeśli nie mamy przynajmniej jednej strony to mamy ichnull
i obsłużyć jakoś inaczej empty state, niż pokazywać że stron mamy jedną (ale to jest uwaga bardziej stylistyczna niż funkcjonalna).useQuery
. Przeczytajcie dokładnie dokumentację. Po co tooffers
ustawiane za każdym razem w stanie, po co toonSuccess
kilka linijek niżej, jak useQuery zwraca nam taki ekstra obiekt z wszysktimi danymi? Robiciezamiast linijki 46,
const { data } = useQuery(
zamiast 44 i w obieckiedata
macie wszystko czego potrzebujecie w formacie jaki potrzebujecie i jeszczeuseQuery
dba o cache. Page wyświetlacie z backendu, a ta trzymana w stanie jest tylko po to żeby wiedzieć o jaką requestowaliścieuseQuery
.setOffers(([currentOffers]) => [currentOffers, _page])
5
, na stronie6
dostał błąd, to nie zostanie o nim powiadomiony, nie zobaczy komunikatu o błędzie, a przekieruje go na stronę pierwszą i wyczyści mu tablicę. Co więcej, przez to co pisałem wyżej, pewnie nawet nie wczyta mu się strona pierwsza. Lepiej pokazać jakiś błąd i wtedy zrobić jakiś sensowny handling (może to być cofnięcie strony, może to być pójście na pierwszą, ważne żeby to było spójne).useQuery
te same uwagi co wyżej, dodatkowo to o czym mówiłem na wykładzie, nie invalidujcie tych query ręcznie, to się absolutnie mija z celem, rzeczy któreuseQuery
używa do wykonania requesta powinny być w tablicy zależności (powinny być elementamiklucza
tablicy)theme
do stylowania?any
...