Sobes.tech
Middle

Разкажете за разликите между управляваните и неуправляемите компоненти в React.

sobes.tech AI

Отговор от AI

Контролираните компоненти управляват своето състояние чрез useState (или this.state в класовете) и получават данни и функции за обратно извикване чрез props. Състоянието на формуляра, например, се съхранява в състоянието на React и се актуализира чрез обработващи onChange.

Неконтролираните компоненти съхраняват своето състояние вътре в DOM. За достъп до тяхната стойност се използва useRef (или React.createRef в класовете), за да се получи препратка към DOM елемента. Стойността на елементите на формуляра, например, се извлича директно от DOM при изпращане.

Характеристика Контролиран компонент Неконтролиран компонент
Управление на състоянието React State (useState) DOM
Достъп до стойността Чрез състояние и props Чрез Refs (useRef)
Актуализация Реактивно, при всяка промяна При явна акция (например, изпращане)
Валидация В логиката на React Чрез стандартен HTML API или ръчно след получаване на стойността

Пример за контролиран компонент:

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

Пример за неконтролиран компонент:

import React, { useRef } from 'react';

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

  const handleClick = () => {
    alert('Стойност на input: ' + inputRef.current.value);
  }

  return (
    <> 
      <input type="text" ref={inputRef} />
      <button onClick={handleClick}>Вземи стойност</button>
    </>
  );
}

Изборът между тях зависи от сложността на логиката и необходимостта от незабавна реакция на промените във входа. Контролираните компоненти са по-подходящи за сложни форми и валидиране в реално време. Неконтролираните са подходящи за прости форми или за интеграция с външни DOM библиотеки.