Pokolei ;)
-
Zdefiniuj klasę RecipesList
- Pamiętaj by dziedziczyła (extends) po React.Component
- Zwróc cokolwiek do render()
- Wyrenderuj ją w App
-
Zdefiniuj potrzebny początkowy stan:
- recipes
- pagesCount
- currentPage
- search
- loading
-
W componentDidMount ściągnij listę produktów
- Ustaw stan ładowania
fetch('https://kuznia-kodu.pl/api/recipes')
- Sparsuj pierwszą odpowiedź do JSONa (data.json())
- Zapisz odpowiedź do stanu (przepisy i ilość przepisów)
- Ustaw stan ładowania
-
Wyświetl stan ładowania
- Jeśli się ładuje wyświetl ładuje
- Jeśli się nie ładuje wyświetl diva z napisem "Lista przepisów"
-
Wyświetl listę przepisów
- Dla każdego przepisu (recipe.map) wyświetl najpierw tylko tytuł (tj. zwróć diva z tytułem). Pamiętaj o wąsatych nawiasach
- Wyświetl zdjęcie
Sporo zdjęć nie działa, by nie wyświetlać ikonki zepsutego obrazka można użyć
<object data={recipe.image} type="image/png" />>
- Wyświetl link
- Wyświetl opis
-
Dodaj szukajkę
- Dodaj label a w nim input
- Podepnij początkowy stan pod input, sprawdź czy działa
- Przy zmianie wartości inputa zmień stan
search
- Zobacz czy działa (console.log w render)
-
Wyjmij ładowanie przepisów do osobnej metody
- Nad componentDidMount zdefiniuj metodę fetchRecipes
- Przenieś logikę związaną z łapaniem danych i ustawianiem zsanu z componentDidMount do fetchRecipes
- Wywołaj fetchRecipes w componentDidMount. Pamiętaj że musisz wywołać this.fetchRecipes()!
-
Dodaj wartość search ze stanu do zapytania o listę przepisów
- fetch(
https://kuznia-kodu.pl/api/recipes?search=${search}
) - Sprawdź czy działa (zmień stan początkowy)
- fetch(
-
Na zmianie stanu search ponownie zapytaj o listę przepisów
- componentDidUpdate - sprawdź czy zmieniła się treść
- Jeśli tak to ponownie wywołaj
this.fetchRecipes
Jest to dość kiepskie rozwiązanie bo łatwo wywołać wyścig. Więcej informacji w tym artykule
-
Dodaj paginację
- Pod listą wyświetl obecną stronę
- Dodaj przycisk do następnej strony
- Po kliknięciu zwiększ stronę
- w componentDidUpdate wywołaj fetchRecipes również jeśli zmieniła się strona
- zablokuj przycisk jeśli jesteśmy na ostatniej stronie
- Jeszcze raz dla przycisku spowrotem