React JS – podstawy

React JS to biblioteka JavaScript stworzona przez Facebook (obecnie Meta) do budowania interfejsów użytkownika, szczególnie w aplikacjach typu Single Page Application (SPA). Jej popularność wynika z wysokiej wydajności, elastyczności oraz możliwości łatwego tworzenia dynamicznych, interaktywnych stron internetowych.

Dlaczego warto używać React JS?

React skupia się na budowie komponentów, które mogą być wielokrotnie używane w różnych miejscach aplikacji. Jego podejście oparte na wirtualnym DOM pozwala na efektywne zarządzanie aktualizacjami interfejsu użytkownika, co znacznie zwiększa wydajność w porównaniu do tradycyjnych metod manipulacji DOM.

Pondato, React JS zyskał ogromną popularność dzięki swojej prostocie, dużej społeczności oraz wsparciu w tworzeniu zarówno aplikacji internetowych, jak i mobilnych (za pomocą React Native). Dodatkowo, wiele firm na całym świecie wykorzystuje React w swoich projektach, co czyni go wartościową technologią dla każdego programisty front-end.

Podstawowe koncepcje w React JS

Komponenty (Components)

Podstawowym budulcem aplikacji w React są komponenty. Są to samodzielne, odizolowane fragmenty interfejsu, które można wielokrotnie używać w różnych miejscach aplikacji. Istnieją dwa główne rodzaje komponentów:

Komponenty funkcyjne – bazują na funkcjach JavaScript.

Komponenty klasowe – korzystają z klas ES6 i dawniej były popularnym wyborem, jednak po wprowadzeniu hooków w React 16.8 komponenty funkcyjne stały się preferowaną metodą.

Przykład komponentu funkcyjnego

function Welcome() {
  return <h1>Witaj w React!</h1>;
}

JSX (JavaScript XML)

JSX to rozszerzenie składni JavaScript, które pozwala na mieszanie logiki JavaScript z kodem HTML. Zamiast pisać kod HTML w oddzielnych plikach, JSX umożliwia umieszczanie go bezpośrednio w funkcjach JavaScript. To ułatwia zarządzanie kodem i zwiększa czytelność.

Przykład JSX:

const element = <h1>Hello, World!</h1>;

JSX pod maską jest przekształcane do zwykłych wywołań JavaScript, co pozwala na efektywne manipulowanie DOM.

Props

Props to sposób przekazywania danych między komponentami. Są one niezmienne, co oznacza, że komponent-rodzic przekazuje dane komponentowi-dziecku, ale dziecko nie może ich zmienić.

Przykład:

function User(props) {
  return <h1>Witaj, {props.name}!</h1>;
}

<User name="Jan" />

Tutaj komponent User otrzymuje wartość props.name i wyświetla „Witaj, Jan!”.

Szukasz wsparcia w projektach IT?
Szukasz wsparcia w projektach IT?
Szukasz wsparcia w projektach IT?
Napisz do nas!

State (Stan)

State to dynamiczne dane, które mogą się zmieniać w trakcie działania aplikacji. W komponentach funkcyjnych korzystamy z hooka useState do zarządzania stanem.

Przykład:

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

  return (
    <div>
      <p>Stan licznika: {count}</p>
      <button onClick={() => setCount(count + 1)}>Zwiększ</button>
    </div>
  );
}

Stan (count) zmienia się po każdym kliknięciu przycisku.

Cykl Życia Komponentu (Component Lifecycle)

Cykl życia komponentów klasowych

Komponenty klasowe mają wyraźnie zdefiniowane etapy cyklu życia, takie jak:

Mounting – komponent jest montowany do DOM (np. componentDidMount).

Updating – komponent jest aktualizowany (np. componentDidUpdate).

Unmounting – komponent jest usuwany z DOM (np. componentWillUnmount).

Hooki w komponentach funkcyjnych

Dzięki wprowadzeniu hooków, komponenty funkcyjne mogą korzystać z funkcji zarządzania efektami ubocznymi, np. za pomocą useEffect.

Przykład:

useEffect(() => {
  document.title = `Liczba kliknięć: ${count}`;
}, [count]);

Eventy i obsługa zdarzeń w React

React posiada wbudowany mechanizm obsługi zdarzeń, takich jak kliknięcia myszą czy zmiany wartości pól tekstowych.

Przykład obsługi kliknięcia:

function Button() {
  function handleClick() {
    alert('Kliknięto przycisk!');
  }

  return <button onClick={handleClick}>Kliknij</button>;
}

Możemy również przekazywać funkcje jako propsy, aby umożliwić komponentom-rodzicom kontrolę nad interakcjami w komponentach-dzieciach.

Routing w React – React Router

Większość aplikacji wymaga nawigacji między różnymi stronami. React Router to popularna biblioteka do obsługi routingu w React.

Aby skonfigurować routing, najpierw instalujemy pakiet react-router-dom, a następnie definiujemy trasy w naszej aplikacji.

Przykład konfiguracji:

import { BrowserRouter as Router, Route, Link } from 'react-router-dom';

function App() {
  return (
    <Router>
      <div>
        <Link to="/">Home</Link>
        <Link to="/about">About</Link>

        <Route exact path="/" component={Home} />
        <Route path="/about" component={About} />
      </div>
    </Router>
  );
}

Praca z formularzami w React

Formularze kontrolowane (Controlled Components)

W formularzach kontrolowanych, wartości pól są przechowywane w stanie komponentu.

Przykład:

function LoginForm() {
  const [email, setEmail] = useState('');

  return (
    <form>
      <input value={email} onChange={(e) => setEmail(e.target.value)} />
    </form>
  );
}

Formularze niekontrolowane (Uncontrolled Components)

W formularzach niekontrolowanych dane są pobierane bezpośrednio z DOM za pomocą referencji.

Przykład:

function LoginForm() {
  const emailRef = useRef();

  return (
    <form>
      <input ref={emailRef} />
    </form>
  );
}

Styling w React

React oferuje kilka podejść do stylizacji komponentów. Można używać tradycyjnych arkuszy CSS, jak i bardziej nowoczesnych narzędzi, takich jak Styled Components.

Przykład:

import styled from 'styled-components';

const Button = styled.button`
  background-color: blue;
  color: white;
`;

<Button>Kliknij mnie</Button>

Podstawy zarządzania stanem w aplikacjach React

useState vs useReducer

useState jest najprostszym hookiem do zarządzania stanem, natomiast useReducer oferuje większą kontrolę w bardziej skomplikowanych przypadkach.

Context API

Context API pozwala na udostępnianie globalnych danych bez potrzeby przekazywania propsów przez wiele poziomów komponentów.

Przykład:

const ThemeContext = React.createContext();

function App() {
  return (
    <ThemeContext.Provider value="dark">
      <Toolbar />
    </ThemeContext.Provider>
  );
}

Podłączenie do API z React

React umożliwia łatwe pobieranie danych z zewnętrznych API za pomocą fetch lub Axios.

useEffect(() => {
  fetch('https://api.example.com/data')
    .then(response => response.json())
    .then(data => setData(data));
}, []);

Podsumowanie

Poznałeś podstawy React, takie jak komponenty, stan, propsy oraz cykl życia komponentów. Kolejnym krokiem może być nauka zaawansowanych narzędzi, takich jak Redux lub budowanie bardziej skomplikowanych aplikacji z wykorzystaniem zewnętrznych API i Context API. React to potężne narzędzie, które z pewnością zwiększy twoją produktywność jako programisty front-end.

razem stwórzmy coś ciekawego