Sobes.tech
Middle

Povězte o rozdílech mezi řízenými a řízenými komponentami v Reactu.

sobes.tech AI

Odpověď od AI

Řízené komponenty spravují svůj stav pomocí useState (nebo this.state ve třídách) a přijímají data a zpětné volání funkcí přes props. Stav formuláře je například uložen v React stavu a aktualizován pomocí onChange handlerů.

Neřízené komponenty ukládají svůj stav uvnitř DOM. Pro přístup k jejich hodnotě se používá useRef (nebo React.createRef ve třídách), aby se získala reference na DOM prvek. Hodnota prvků formuláře je například přímo extrahována z DOM při odeslání.

Charakteristika Řízená komponenta Neřízená komponenta
Správa stavu React State (useState) DOM
Přístup ke hodnotě Přes stav a props Přes Refs (useRef)
Aktualizace Reaktivně, při každé změně Při explicitní akci (např. submit)
Validace V React logice Přes standardní HTML API nebo ručně po získání hodnoty

Příklad řízené komponenty:

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} />
  );
}

Příklad neřízené komponenty:

import React, { useRef } from 'react';

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

  const handleClick = () => {
    alert('Hodnota inputu: ' + inputRef.current.value);
  }

  return (
    <> 
      <input type="text" ref={inputRef} />
      <button onClick={handleClick}>Získat hodnotu</button>
    </>
  );
}

Volba mezi nimi závisí na složitosti logiky a potřebě okamžité reakce na změny vstupu. Řízené komponenty jsou vhodnější pro složité formuláře a validaci v reálném čase. Neřízené jsou vhodné pro jednoduché formuláře nebo integraci s třetími knihovnami DOM.