Sobes.tech
Middle

Реците о разликама између контролисаних и неконтролисаних компоненти у React.

sobes.tech АИ

Одговор од АИ

Kontrolisane komponente upravljaju svojim stanjem putem useState (ili this.state u klasama) i primaju podatke i funkcije za povratni poziv putem props-a. Stanje forme, na primer, čuva se u React stanju i ažurira putem onChange handlera.

Ne kontrolisane komponente čuvaju svoje stanje unutar DOM-a. Za pristup njihovoj vrednosti koristi se useRef (ili React.createRef u klasama) za dobijanje reference na DOM element. Vrednost form elementa, na primer, direktno se izvlači iz DOM-a prilikom slanja.

Karakteristika Kontrolisana komponenta Ne kontrolisana komponenta
Upravljanje stanjem React stanje (useState) DOM
Pristup vrednosti Kroz stanje i props Kroz Refs (useRef)
Ažuriranje Reaktivno, pri svakoj promeni Pri eksplicitnoj akciji (npr. submit)
Validacija U React logici Kroz standardni HTML API ili ručno nakon dobijanja vrednosti

Primer kontrolisane komponente:

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

Primer nekontrolisane komponente:

import React, { useRef } from 'react';

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

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

  return (
    <> 
      <input type="text" ref={inputRef} />
      <button onClick={handleClick}>Preuzmi vrednost</button>
    </>
  );
}

Izbor između njih zavisi od složenosti logike i potrebe za trenutnim reakcijama na promene unosa. Kontrolisane komponente su pogodnije za složene forme i validaciju u realnom vremenu. Nekontrolisane su pogodne za jednostavnije forme ili za integraciju sa spoljnim DOM bibliotekama.