Skip to content
Devstock Academy
  • O nas
  • Moduły Akademii
    • Moduł 1 – Podstawy programowania
    • Moduł 2 – React.js
    • Moduły 3-6
  • Blog
  • Kontakt
  • O nas
  • Moduły Akademii
    • Moduł 1 – Podstawy programowania
    • Moduł 2 – React.js
    • Moduły 3-6
  • Blog
  • Kontakt
Dołącz do społeczności
Devstock Academy Banner
Programowanie i Technologie Webowe

Jak unikać podstawowych błędów w React – przewodnik przetrwania dla nowicjuszy

  • 06 maj, 2024
  • Komentarze 0

Kiedy zaczynasz swoją przygodę z Reactem, łatwo poczuć się jak na minowym polu – każdy krok wydaje się być potencjalnym źródłem błędów. Nie martw się, mamy dla Ciebie mapę, która pomoże Ci uniknąć najczęstszych pułapek, w które wpadają początkujący. Niech ten artykuł będzie Twoim osobistym przewodnikiem po krainie Reacta, który pozwoli Ci unikać wpadek i programować z uśmiechem! Pożegnaj raz na zawsze podstawowe błędy w React JS!

Zapominanie o kluczach w listach

Jednym z podstawowych błędów jest zapominanie o kluczach w listach. Klucze są niezwykle ważnym elementem w React, gdyż pozwalają na wydajne renderowanie list elementów. Dzięki kluczom React wie, jak identyfikować poszczególne elementy listy podczas zmian, co minimalizuje ilość pracy wymaganą do zaktualizowania DOM. Pamiętaj, aby klucze były unikalnymi identyfikatorami stabilnie identyfikującymi elementy listy między renderowaniami.

Klucze powinny być unikalnymi identyfikatorami, które stabilnie identyfikują elementy listy między renderowaniami. Zwykle, jeśli masz dane pochodzące z bazy danych, możesz użyć identyfikatorów z tych danych jako kluczy.

Przykład bez kluczy:

W powyższym przykładzie, jeśli users zmieni się (np. dodanie, usunięcie użytkowników), React będzie miał trudności z efektywnym zaktualizowaniem listy. Może to prowadzić do błędów i problemów z wydajnością.

Przykład z kluczami:

Dzięki dodaniu kluczy, React może skutecznie identyfikować i zarządzać elementami listy, minimalizując potrzebę pełnego ponownego renderowania.

Używanie ‘class’ zamiast ‘className’

Jednym z często spotykanych błędów wśród osób nowych w React jest używanie atrybutu class zamiast className w JSX. W HTML używamy class do określenia klas CSS, ale w JSX, który jest syntaktycznym cukrem dla funkcji JavaScript tworzących obiekty React, należy użyć className, ponieważ class jest zarezerwowanym słowem w JavaScript.

Przykład błędnego użycia:

Taki kod spowoduje ostrzeżenie w konsoli i nie przypisze klasy CSS do diva.

Przykład poprawnego użycia:

Używając className, możemy bez problemu przypisać klasę CSS do elementu JSX.

Brak destrukturyzacji przy ekstrakcji propsów

Destrukturyzacja propsów w React jest techniką, która nie tylko usprawnia kod, ale także czyni go bardziej czytelnym i łatwiejszym w utrzymaniu. Jest szczególnie przydatna, gdy komponenty przyjmują wiele propsów, co pozwala na szybkie identyfikowanie, które właściwości są używane. Korzystanie z destrukturyzacji zmniejsza również ryzyko błędów związanych z niezdefiniowanymi lub nullowymi wartościami, poprawiając ogólną jakość i stabilność kodu.

Przykład destrukturyzacji:

Korzyści destrukturyzacji:

  • Czystość i zwięzłość kodu: Dzięki destrukturyzacji możemy pominąć wielokrotne odwołania do props, co czyni kod krótszym i bardziej zrozumiałym.
  • Łatwiejsze zarządzanie zmianami: Gdy potrzebujemy dodać lub usunąć prop, możemy to zrobić w jednym miejscu w liście argumentów funkcji, zamiast modyfikować każdą instancję użycia.
  • Błędy typu: Dzięki wyraźnemu określeniu, które propsy są używane w komponencie, łatwiej jest zarządzać typami danych i unikać błędów typu undefined czy null.

Problemy z nadużyciem useState

Hook useState jest niezastąpiony w zarządzaniu stanem lokalnym w komponentach funkcyjnych. Nadużywanie tego narzędzia, zwłaszcza poprzez tworzenie wielu drobnych stanów, może prowadzić do komplikacji w zarządzaniu stanem aplikacji.

Tworzenie osobnych stanów dla każdej pojedynczej zmiennej często prowadzi do rozdrobnienia stanu, co może utrudniać śledzenie przepływu danych i zarządzanie aplikacją.

Przykład rozdrobnionego stanu:

W tym przykładzie każda wartość (imię, email, wiek) jest przechowywana w osobnym stanie, co może sprawić, że zarządzanie zmianami w tych danych stanie się niepotrzebnie skomplikowane, szczególnie w dużych komponentach.

Dla bardziej złożonych danych lepszym rozwiązaniem jest użycie jednego stanu obiektowego, co ułatwia zarządzanie i kontrolę nad zależnościami stanu, a także redukuje ilość niepotrzebnych renderowań.

Przykład zarządzania skomplikowanym stanem:

Tutaj user stanowi pojedynczy obiekt stanu, który grupuje powiązane dane. Takie podejście pozwala na bardziej uporządkowane i efektywne zarządzanie danymi użytkownika.

Dobre praktyki w zarządzaniu stanem

Stosowanie się do poniższych dobrych praktyk może pomóc unikać typowych pułapek związanych z nadużyciem useState:

  • Konsoliduj stan: Gdzie to możliwe, staraj się grupować powiązane dane w jednym obiekcie stanu. To nie tylko ułatwia zarządzanie, ale również poprawia czytelność i efektywność komponentów.
  • Ogranicz ilość stanów: Zanim utworzysz nową zmienną stanu, zastanów się, czy jest to absolutnie konieczne. Czasami lepiej jest operować na już istniejących danych.

Kurs programowania z gwarancją pracy - banner

Nieprawidłowe używanie useEffect

Hook useEffect w React jest podstawowym narzędziem do zarządzania efektami ubocznymi w komponentach funkcyjnych, takimi jak subskrypcje, żądania sieciowe czy manipulacje DOM. Chociaż jest niezwykle użyteczny, niewłaściwe lub nadmierne użycie tego hooka może prowadzić do problemów z wydajnością, trudności w debugowaniu i komplikacji w utrzymaniu kodu.

Nieprawidłowe użycie useEffect:

1. Brak listy zależności

Nie dodanie listy zależności (dependencies) sprawia, że hook useEffect uruchamia się po każdym renderowaniu komponentu. To może prowadzić do niepotrzebnych obliczeń i zapytań sieciowych, obciążając zasoby i wpływając na wydajność.

Przykład problemu:

W tym przypadku, funkcja fetchData() zostanie wywołana za każdym razem, gdy komponent zostanie zrenderowany, co może być nieefektywne i prowadzić do nieoczekiwanych błędów.

2. Zbyt wiele zależności

Dodanie zbyt wielu zależności do listy może spowodować, że efekt będzie uruchamiany zbyt często, szczególnie gdy te zależności często się zmieniają. To może powodować lagowanie interfejsu użytkownika oraz nieefektywne zużycie zasobów.

Przykład problemu:

W tym przypadku, każda zmiana w many lub dependencies spowoduje wywołanie efektu, co może być niepotrzebne i prowadzić do nadmiernego przetwarzania.

Aby unikać problemów z nadużyciem useEffect i zapewnić optymalną wydajność aplikacji, określaj tylko te zależności, które rzeczywiście wpływają na efekt. Pominięcie niepotrzebnych zależności może zapobiegać nadmiernemu uruchamianiu efektów.

Zbyt mało komponowania, zbyt wiele powtórzeń

Jednym z kluczowych założeń Reacta jest promowanie komponowalności, czyli tworzenia małych, modularnych komponentów, które można łatwo ponownie używać w różnych częściach aplikacji. Komponowalność nie tylko pomaga w utrzymaniu czystości i organizacji kodu, ale również znacząco zwiększa jego skalowalność i ułatwia testowanie.

W praktyce często zdarza się, że programiści React powielają ten sam kod w różnych komponentach, co prowadzi do narastania redundancji i potencjalnych problemów z przyszłymi modyfikacjami. Jeśli trzeba wprowadzić zmianę w powtarzanym kodzie, wymaga to aktualizacji we wszystkich miejscach, gdzie ten kod został użyty, co jest czasochłonne i podatne na błędy.

Komponowanie polega na tworzeniu generycznych komponentów, które mogą być konfigurowane za pomocą propsów i używane w różnych kontekstach. To podejście nie tylko redukuje powtórzenia, ale także ułatwia zarządzanie kodem.

Przykład: Uniwersalny przycisk

Rozważmy przycisk, który jest używany w wielu miejscach aplikacji. Zamiast kopiować i wklejać tę samą definicję przycisku wielokrotnie, możemy stworzyć jeden uniwersalny komponent CustomButton, który może być dostosowany do różnych potrzeb przez przekazanie odpowiednich propsów.

W tym przykładzie CustomButton jest uniwersalnym komponentem, który przyjmuje funkcję onClick, zawartość children oraz opcjonalnie className do stylizacji. Następnie, tworzymy specyficzne przyciski takie jak SaveButton i CancelButton, które wykorzystują CustomButton do wykonania konkretnej akcji i są już dostosowane stylem.

Takie podejście umożliwia łatwe modyfikacje przycisku w jednym miejscu, które automatycznie propagują się do wszystkich instancji CustomButton w aplikacji, zmniejszając ryzyko błędów i ułatwiając zarządzanie kodem.

Zbyt wiele logiki w komponentach

W praktykach projektowych React zaleca się, aby komponenty były przejrzyste i skoncentrowane na prezentacji, z minimalną logiką biznesową wplecioną bezpośrednio w interfejs użytkownika. Kiedy komponenty stają się zbyt obszerne i skomplikowane, prowadzi to do szeregu problemów:

  • Słaba separacja odpowiedzialności: Idealnie, każdy komponent powinien realizować jedno konkretne zadanie. Jeśli komponent zaczyna obsługiwać wiele zadań, przestaje przestrzegać zasady pojedynczej odpowiedzialności.
  • Trudności w ponownym użyciu: Gdy komponent zawiera zbyt szczegółową lub specyficzną logikę, jego ponowne wykorzystanie w innych miejscach aplikacji staje się problematyczne.

Przykład problemu:

Weźmy pod uwagę komponent UserProfile, który zajmuje się ładowaniem danych użytkownika, ich prezentacją, oraz logiką aktualizacji.

W tym przykładzie, komponent zarządza stanem ładowania, błędów, pobiera dane z API, i obsługuje ich wyświetlanie. To zbyt wiele obowiązków dla jednego komponentu.

Lepsze podejście:

Zalecanym rozwiązaniem jest przeniesienie logiki zarządzania danymi do niestandardowego hooka, co pozwala na większą klarowność i skupienie komponentu UserProfile na wyłącznie prezentacji.

W tej strukturze, cała logika ładowania i zarządzania danymi jest wydzielona do hooka useUserData. Komponent UserProfile staje się znacznie prostszy i skupia się wyłącznie na prezentacji danych, co czyni go łatwiejszym do testowania i ponownego użycia.

Nieczyszczenie efektów ubocznych w useEffect

Hook useEffect w React to potężne narzędzie, które pozwala na synchronizację działań z cyklem życia komponentu. Jednakże często pomijanym, ale krytycznym aspektem jest czyszczenie efektów ubocznych, zwłaszcza gdy komponent jest usuwany z drzewa DOM. Nieczyszczenie efektów, takich jak timery, subskrypcje, czy zapytania sieciowe, może prowadzić do problemów z wydajnością, błędów i nieoczekiwanego zachowania aplikacji.

Przyjrzyjmy się przykładowi z timerem, który aktualizuje dane po określonym czasie:

Zapomnienie o dodaniu funkcji czyszczącej może skutkować tym, że timer będzie kontynuował działanie nawet po demontażu komponentu, co oznacza, że próby wykonania operacji na już nieistniejących elementach mogą generować błędy typu “Cannot read property of undefined” lub inne podobne problemy.

Zawsze pamiętaj o implementacji czyszczenia w useEffect, aby zapewnić, że wszystkie zasoby są odpowiednio zarządzane. Regularne czyszczenie efektów ubocznych w React jest nie tylko dobrą praktyką, ale również kluczowym elementem, który gwarantuje stabilność i niezawodność Twojej aplikacji.

Nadmiarowy Props Drilling

Props drilling, czyli sytuacja, w której dane są przekazywane przez wiele poziomów komponentów w aplikacji React, może prowadzić do niepotrzebnej złożoności i trudności w utrzymaniu kodu. Jest to zjawisko, które występuje, gdy komponenty są zagnieżdżone głęboko, a dane muszą być przekazywane na każdym poziomie, aby dotrzeć tam, gdzie są faktycznie potrzebne.

Przykład zjawiska Props Drilling:

Załóżmy, że mamy główny komponent App, który przekazuje dane do ComponentA, następnie do ComponentB, a potem do ComponentC. Jeśli ComponentB i ComponentC nie używają tych danych bezpośrednio, ale muszą je przekazać dalej, występuje nadmierny props drilling.

W tym przykładzie, dane użytkownika są przekazywane przez każdy poziom komponentu, od App do ComponentC, nawet jeśli pośrednie komponenty (ComponentA i ComponentB) nie wykorzystują tych informacji bezpośrednio.

Dlaczego to problem?

  1. Złożoność kodu: Im więcej komponentów musi przekazywać dane, tym trudniej jest zarządzać aplikacją i zrozumieć jej przepływ danych.
  2. Trudności w utrzymaniu: Wprowadzenie zmian w danych lub ich strukturze może wymagać znaczących modyfikacji w wielu komponentach, co zwiększa ryzyko błędów.

Dobra praktyka zaleca ograniczenie zagnieżdżenia komponentów do około 2-3 poziomów. Gdy struktura aplikacji staje się zbyt skomplikowana, warto zastosować bardziej zaawansowane techniki zarządzania stanem, które pomogą w efektywnym przekazywaniu danych. np. użycie Context API.

W artykule omówiono wiele typowych błędów, jakie mogą popełnić nowi programiści pracujący z React. Od zapominania o kluczach w listach po nadmierną logikę w komponentach, tekst ten pełni rolę przewodnika, który pomaga unikać tych pułapek. Poprzez wyjaśnienie konkretnych problemów i prezentację odpowiednich rozwiązań, czytelnicy otrzymują solidną bazę wiedzy, która pozwoli im uniknąć frustracji związanej z częstymi błędami oraz osiągnąć większą pewność siebie w pracy z Reactem.

 

Przeczytaj też o:
Dlaczego Event Loop jest tak ważny?
Jak efektywnie wykorzystać GitHub do przeglądu kodu – poradnik dla początkujących

Tags:
Optymalizacja i wydajnośćReact.JSWebDevelopment
Udostępnij na:
Mikrofrontend w 2024r.
Akademia Devstock – Start szóstej edycji!

Zostaw komentarz :) Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Dołącz do społeczności DEVSTOCK - banner reklamowy

Najnowsze wpisy

Thumb
Cursor AI vs VS Code z Copilotem:
09 cze, 2025
Thumb
GitHub Copilot vs Cursor vs inne: Starcie
03 cze, 2025
Thumb
Jak AI zmienia programowanie w 2025? Narzędzia,
30 maj, 2025

Kursy Samodzielne

  • Kurs HTML - obrazek wyróżniający
    Kurs HTML – Zbuduj strukturę swojej pierwszej strony internetowej
    99,00 zł Pierwotna cena wynosiła: 99,00 zł.49,00 złAktualna cena wynosi: 49,00 zł.
  • Kurs CSS Podstawowy - obrazek wyróżniający
    Kurs CSS Podstawowy – Stwórz styl i układ swojej pierwszej strony internetowej
    99,00 zł Pierwotna cena wynosiła: 99,00 zł.49,00 złAktualna cena wynosi: 49,00 zł.
  • Kurs CSS Zaawansowany - obrazek wyróżniający
    Kurs CSS Zaawansowany – Opanuj nowoczesne techniki stylowania i układu
    99,00 zł Pierwotna cena wynosiła: 99,00 zł.49,00 złAktualna cena wynosi: 49,00 zł.
  • Kurs JS od podstaw - obrazek wyróżniający
    Kurs JavaScript od podstaw
    149,00 zł Pierwotna cena wynosiła: 149,00 zł.99,00 złAktualna cena wynosi: 99,00 zł.
  • Kurs JavaScript zaawansowany - obrazek wyróżniający
    Kurs JavaScript zaawansowany
    149,00 zł Pierwotna cena wynosiła: 149,00 zł.99,00 złAktualna cena wynosi: 99,00 zł.
klarna raty 0% - banner
Droga do kariery z Akademią Devstock
Banner reklamowy whitepress

Tagi

5G AI Architektura Cyberbezpieczeństwo Feedback Frontend Git IoT JavaScript Motywacja Nauka efektywna Optymalizacja i wydajność Programowanie React.JS Rozwój osobisty WebDevelopment
Logo FitBody Center Warszawa
Dołącz do społeczności DEVSTOCK - banner reklamowy

Produkty

  • Kurs HTML - obrazek wyróżniający
    Kurs HTML – Zbuduj strukturę swojej pierwszej strony internetowej
    99,00 zł Pierwotna cena wynosiła: 99,00 zł.49,00 złAktualna cena wynosi: 49,00 zł.
  • Kurs CSS Podstawowy - obrazek wyróżniający
    Kurs CSS Podstawowy – Stwórz styl i układ swojej pierwszej strony internetowej
    99,00 zł Pierwotna cena wynosiła: 99,00 zł.49,00 złAktualna cena wynosi: 49,00 zł.
  • Kurs CSS Zaawansowany - obrazek wyróżniający
    Kurs CSS Zaawansowany – Opanuj nowoczesne techniki stylowania i układu
    99,00 zł Pierwotna cena wynosiła: 99,00 zł.49,00 złAktualna cena wynosi: 49,00 zł.
  • Kurs JS od podstaw - obrazek wyróżniający
    Kurs JavaScript od podstaw
    149,00 zł Pierwotna cena wynosiła: 149,00 zł.99,00 złAktualna cena wynosi: 99,00 zł.
  • Kurs JavaScript zaawansowany - obrazek wyróżniający
    Kurs JavaScript zaawansowany
    149,00 zł Pierwotna cena wynosiła: 149,00 zł.99,00 złAktualna cena wynosi: 99,00 zł.
Group-5638-1

Devstock – Akademia programowania z gwarancją pracy

🏠 ul. Bronowska 5a,
03-995 Warszawa
📞 +48 517 313 589
✉️ contact@devstockacademy.pl

Linki

  • Poznaj firmę Devstock
  • Wejdź do społeczności Devstock
  • Polityka prywatności
  • Regulamin

FitBody Center

Strona

  • Strona główna
  • Kontakt

Newsletter

Bądź na bieżąco, otrzymuj darmową wiedzę i poznaj nas lepiej!


Icon-facebook Icon-linkedin2 Icon-instagram Icon-youtube Tiktok
Copyright 2025 Devstock. Wszelkie prawa zastrzeżone
Devstock AcademyDevstock Academy
Sign inSign up

Sign in

Don’t have an account? Sign up
Lost your password?

Sign up

Already have an account? Sign in

Zacznij kodować od zera – za 0 zł

Dołącz do społeczności Devstock i zgarnij 14 dni darmowego dostępu do naszej Akademii – pełnej lekcji, zadań, quizów i grywalizacji.

Przetestuj wszystko na luzie – bez zobowiązań.

  • 🟨 Nauka od podstaw, nawet jeśli nigdy nie kodował_ś
  • 🟨 Wszystko krok po kroku, jasno i praktycznie
  • 🟨 Idealna baza pod AI, automatyzacje i projekty
  • 🟨 Bez zobowiązań – testuj i ucz się we własnym tempie
CHCĘ DOSTĘP ZA 0 ZŁ – SPRAWDZAM!
SPRAWDZAM ZA 0 ZŁ!