Sobes.tech
Junior

Na czym polega różnica między propsami a stanem w React?

sobes.tech AI

Odpowiedź od AI

Props (właściwości) i stan (state) to dwa kluczowe mechanizmy zarządzania danymi w komponentach React.

Props:

  • Są przekazywane z komponentu nadrzędnego do podrzędnego.
  • Są niezmiennicze (immutable) wewnątrz komponentu podrzędnego.
  • Umożliwiają interakcję między komponentami.
  • Określają wygląd lub zachowanie komponentu na podstawie danych wejściowych.

Stan:

  • Należy do konkretnego komponentu i jest nim zarządzany.
  • Jest zmienny (mutable) wewnątrz komponentu.
  • Reprezentuje dane, które mogą się zmieniać z czasem i wpływać na renderowanie komponentu.
  • Zmiana stanu powoduje ponowne renderowanie komponentu i jego potomków.

Główne różnice można przedstawić w formie tabeli:

Cecha Props Stan
Źródło Komponent nadrzędny Sam komponent
Zmienność Niezmiennicze (immutable) Zmienny (mutable)
Zarządzanie Przekazywane z zewnątrz Zarządzany wewnątrz komponentu
Przeznaczenie Wyświetlanie danych zewnętrznych, konfiguracja Zarządzanie stanem wewnętrznym komponentu
Zmiana powoduje Ponowne renderowanie przy zmianie w rodzicu Ponowne renderowanie przy zmianie w bieżącym komponencie

Przykład użycia props:

// ParentComponent.jsx
import React from 'react';
import ChildComponent from './ChildComponent';

function ParentComponent() {
  const message = "Witaj od rodzica!";
  return (
    <div>
      <ChildComponent text={message} /> {/* Przekazanie props "text" */}
    </div>
  );
}

export default ParentComponent;
// ChildComponent.jsx
import React from 'react';

function ChildComponent(props) {
  return (
    <p>{props.text}</p> {/* Użycie props "text" */}
  );
}

export default ChildComponent;

Przykład użycia stanu:

// Counter.jsx
import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0); // Inicjalizacja stanu "count"

  const increment = () => {
    setCount(count + 1); // Zmiana stanu
  };

  return (
    <div>
      <p>Licznik: {count}</p>
      <button onClick={increment}>Zwiększ</button>
    </div>
  );
}

export default Counter;