Sobes.tech
Middle

Opowiedz o różnicach między komponentami kontrolowanymi a niekontrolowanymi w React.

sobes.tech AI

Odpowiedź od AI

Kontrolowane komponenty zarządzają swoim stanem za pomocą useState (lub this.state w klasach) i otrzymują dane oraz funkcje zwrotne przez props. Stan formularza, na przykład, jest przechowywany w stanie React i aktualizowany przez obsługę onChange.

Niekontrolowane komponenty przechowują swój stan wewnątrz DOM. Aby uzyskać do nich dostęp, używa się useRef (lub React.createRef w klasach), aby uzyskać odwołanie do elementu DOM. Wartość elementów formularza, na przykład, jest pobierana bezpośrednio z DOM podczas wysyłania.

Cecha Kontrolowany komponent Niekontrolowany komponent
Zarządzanie stanem Stan React (useState) DOM
Dostęp do wartości Przez stan i props Przez Refs (useRef)
Aktualizacja Reaktywna, przy każdej zmianie Przy jawnej akcji (np. wysłanie)
Walidacja W logice React Przez standardowe API HTML lub ręcznie po pobraniu wartości

Przykład kontrolowanego komponentu:

import React, { useState } from 'react';

function ControlledInput() {
  const [value, setValue] = useState('');

  const handleChange = (event) => {
    setValue(event.target.value);
  }

  return (
    <input type="text" value={value} onChange={handleChange} />
  );
}

Przykład niekontrolowanego komponentu:

import React, { useRef } from 'react';

function UncontrolledInput() {
  const inputRef = useRef(null);

  const handleClick = () => {
    alert('Wartość input: ' + inputRef.current.value);
  }

  return (
    <> 
      <input type="text" ref={inputRef} />
      <button onClick={handleClick}>Pobierz wartość</button>
    </>
  );
}

Wybór między nimi zależy od złożoności logiki i potrzeby natychmiastowej reakcji na zmiany wejścia. Kontrolowane komponenty są preferowane dla złożonych formularzy i walidacji w czasie rzeczywistym. Niekontrolowane są odpowiednie dla prostych formularzy lub integracji z bibliotekami DOM stron trzecich.