Studenckie Koło Naukowe Informatyki

UMCS

# Autor: SKNI
# 📅 2025-03-08
# ⏳ 13 min

Wprowadzenie do React Hooks

Odkryj potęgę React Hooks i naucz się, jak efektywnie używać useState, useEffect oraz tworzenia własnych hooków.

Wprowadzenie do React Hooks

Czym są React Hooks?

React Hooks zostały wprowadzone w wersji 16.8 jako sposób na używanie stanu i innych funkcji Reacta bez pisania klas. Hooks pozwalają na łatwiejsze ponowne wykorzystanie logiki między komponentami, co czyni kod bardziej przejrzystym i łatwiejszym w utrzymaniu.

Podstawowe Hooki

useState

Hook

useState
pozwala na dodanie lokalnego stanu do komponentów funkcyjnych:

import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Kliknięto {count} razy</p>
      <button onClick={() => setCount(count + 1)}>Kliknij mnie</button>
    </div>
  );
}

useEffect

Hook

useEffect
pozwala na wykonywanie efektów ubocznych w komponentach funkcyjnych:

import React, { useState, useEffect } from 'react';

function Example() {
  const [count, setCount] = useState(0);

  // Podobny do componentDidMount i componentDidUpdate:
  useEffect(() => {
    // Aktualizacja tytułu dokumentu
    document.title = `Kliknięto ${count} razy`;

    // Funkcja czyszcząca (opcjonalna)
    return () => {
      document.title = 'React App';
    };
  }, [count]); // Wykonuje się tylko gdy count się zmienia

  return (
    <div>
      <p>Kliknięto {count} razy</p>
      <button onClick={() => setCount(count + 1)}>Kliknij mnie</button>
    </div>
  );
}

Tworzenie własnych hooków

Jedną z najlepszych cech hooków jest możliwość tworzenia własnych hooków, które enkapsulują logikę specyficzną dla twojej aplikacji.

Przykład: useFetch

import { useState, useEffect } from 'react';

interface UseFetchResult<T> {
  data: T | null;
  loading: boolean;
  error: Error | null;
}

function useFetch<T>(url: string): UseFetchResult<T> {
  const [data, setData] = useState<T | null>(null);
  const [loading, setLoading] = useState<boolean>(true);
  const [error, setError] = useState<Error | null>(null);

  useEffect(() => {
    const fetchData = async () => {
      try {
        setLoading(true);
        const response = await fetch(url);
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        const result = await response.json();
        setData(result);
      } catch (e) {
        setError(e instanceof Error ? e : new Error(String(e)));
      } finally {
        setLoading(false);
      }
    };

    fetchData();
  }, [url]);

  return { data, loading, error };
}

export default useFetch;

Użycie własnego hooka

import React from 'react';
import useFetch from './useFetch';

function UserProfile({ userId }) {
  const {
    data: user,
    loading,
    error,
  } = useFetch(`https://api.example.com/users/${userId}`);

  if (loading) return <div>Ładowanie...</div>;
  if (error) return <div>Wystąpił błąd: {error.message}</div>;
  if (!user) return <div>Nie znaleziono użytkownika</div>;

  return (
    <div>
      <h1>{user.name}</h1>
      <p>Email: {user.email}</p>
      <p>Telefon: {user.phone}</p>
    </div>
  );
}

Interaktywny przykład

Poniżej znajduje się wideo z tutorialem, które pokazuje praktyczne zastosowanie React Hooks:

Diagram Cyklu życia

Zobaczmy, jak działa cykl życia komponentu z hookami:

Podsumowanie

React Hooks to potężne narzędzie, które rewolucjonizuje sposób pisania komponentów React. Dzięki nim możemy:

  • Używać stanu i cyklu życia w komponentach funkcyjnych
  • Ponownie wykorzystywać logikę stanu między komponentami
  • Tworzyć bardziej przejrzysty i łatwiejszy w utrzymaniu kod

Jeśli chcesz dowiedzieć się więcej, polecamy zapoznanie się z następującymi zasobami:

# react
# javascript
# frontend
# programowanie