React to jedna z najpopularniejszych bibliotek do budowy interfejsów użytkownika. Jego elastyczność i prostota sprawiają, że każdy projekt może być tworzony na wiele sposobów. Jednak stosowanie sprawdzonych wzorców projektowych pozwala na stworzenie bardziej uporządkowanego, wydajnego i łatwego w utrzymaniu kodu. W tym artykule przedstawiamy najważniejsze wzorce projektowe w React, które warto znać.
1. Komponenty funkcyjne (Functional Components)
W React rekomenduje się korzystanie z komponentów funkcyjnych zamiast klasowych. Dzięki hookom, komponenty funkcyjne zyskały możliwość obsługi stanu i efektów ubocznych, co sprawia, że są prostsze i bardziej czytelne.
Przykład komponentu funkcyjnego:
function Welcome(props) {
return <h1>Witaj, {props.name}!</h1>;
}Zalety:
- Mniejsza ilość kodu.
- Łatwa integracja z hookami (
useState,useEffect). - Lepsza wydajność dzięki eliminacji metod życiowych klas.
2. Komponenty wyższego rzędu (Higher-Order Components, HOC)
HOC to funkcje, które przyjmują komponent jako argument i zwracają nowy komponent z dodatkową funkcjonalnością.
Przykład:
function withLogging(WrappedComponent) {
return function EnhancedComponent(props) {
console.log('Komponent został wyrenderowany');
return <WrappedComponent {...props} />;
};
}
const EnhancedComponent = withLogging(Welcome);Zastosowanie:
- Dodawanie funkcjonalności, takich jak logowanie, autoryzacja czy ładowanie danych.
Wady:
- Nadmierne stosowanie może prowadzić do wrapper hell (zagnieżdżenia wielu HOC).
3. Render Props
Render props to technika, w której komponent przyjmuje funkcję jako wartość swojego propsa i używa jej do renderowania.
Przykład:
function DataProvider({ render }) {
const data = 'Hello World';
return render(data);
}
function App() {
return (
<DataProvider render={(data) => <h1>{data}</h1>} />
);
}Zalety:
- Łatwe przekazywanie logiki do innych komponentów.
- Większa elastyczność niż HOC.
Wady:
- Zbyt dużo logiki w propsach może prowadzić do chaosu.
4. Kompozycja komponentów
React zachęca do stosowania kompozycji zamiast dziedziczenia. Komponenty powinny być małe i wielokrotnego użytku, które można łączyć w większe całości.
Przykład:
function Card({ children }) {
return <div className="card">{children}</div>;
}
function App() {
return (
<Card>
<h1>Tytuł</h1>
<p>Zawartość karty</p>
</Card>
);
}Zalety:
- Większa reużywalność komponentów.
- Lepsza organizacja kodu.
5. Hooki (Hooks)
React wprowadził hooki w wersji 16.8, co umożliwiło zarządzanie stanem i efektami ubocznymi w komponentach funkcyjnych.
Przykładowe hooki:
- useState – zarządzanie stanem lokalnym.
- useEffect – obsługa efektów ubocznych.
- useContext – kontekst globalny.
Przykład z useState i useEffect:
import React, { useState, useEffect } from 'react';
function Counter() {
const [count, setCount] = useState(0);
useEffect(() => {
console.log(`Licznik: ${count}`);
}, [count]);
return (
<div>
<p>Licznik: {count}</p>
<button onClick={() => setCount(count + 1)}>Zwiększ</button>
</div>
);
}Zalety:
- Eliminacja klas.
- Prostota w zarządzaniu stanem i efektami.
6. Wzorzec kontekstu (Context API)
Context API to rozwiązanie dla problemu przekazywania propsów na wielu poziomach komponentów (prop drilling). Pozwala na tworzenie globalnego stanu, który jest dostępny dla wybranych komponentów.
Przykład:
const ThemeContext = React.createContext('light');
function ThemedButton() {
const theme = React.useContext(ThemeContext);
return <button className={theme}>Kliknij mnie</button>;
}
function App() {
return (
<ThemeContext.Provider value="dark">
<ThemedButton />
</ThemeContext.Provider>
);
}Zalety:
- Eliminacja prop drilling.
- Zarządzanie stanem globalnym w prosty sposób.
Wady:
- Nie zawsze efektywne przy dużych aplikacjach (rozważyć Redux).
Podsumowanie
React oferuje wiele elastycznych wzorców projektowych, które warto stosować w codziennej pracy. Kluczowe wzorce, takie jak komponenty funkcyjne, HOC, render props, kompozycja i hooki, umożliwiają tworzenie kodu łatwiejszego w zarządzaniu i skalowaniu. Dzięki świadomemu wyborowi odpowiedniego wzorca możesz skutecznie rozwiązywać problemy w swoich projektach i dostarczać bardziej zoptymalizowane aplikacje.
Jeśli masz swoje ulubione wzorce projektowe w React, podziel się nimi w komentarzach!
Zdjęcie dodane przez Rashed Paykary




