Что такое контролируемые компоненты и неконтролируемые компоненты в ReactJS? Чем они отличаются друг от друга?
Ответы:
Это относится к компонентам DOM с отслеживанием состояния (элементам формы), и документация React объясняет разницу:
propsи уведомляет изменения через обратные вызовы , как onChange. Родительский компонент «контролирует» его, обрабатывая обратный вызов и управляя своим собственным состоянием, а также передавая новые значения в качестве свойств контролируемому компоненту. Вы также можете назвать это «тупой компонент».refчтобы найти его текущее значение , когда вам это нужно. Это немного больше похоже на традиционный HTML.Большинство нативных компонентов формы React поддерживают как контролируемое, так и неконтролируемое использование:
// Controlled:
<input type="text" value={value} onChange={handleChange} />
// Uncontrolled:
<input type="text" defaultValue="foo" ref={inputRef} />
// Use `inputRef.current.value` to read the current value of <input>
В большинстве (или во всех) случаях следует использовать контролируемые компоненты .
stateскорее, чем props?
props. Неконтролируемый компонент будет использовать stateдля внутреннего контроля самого значения. Это ключевое отличие.
controlled components( <input type="text" value="value" onChange={handleChangeCallbackFn} />) по сравнению с традиционным HTML, где элемент ввода обрабатывает свое собственное значение и может быть прочитан через refsвызываемую uncontrolled components( <value type="text" />). Управляемые компоненты управляют своим собственным состоянием через setStateродительский компонент или получают его в качестве свойств.
defaultValueчерез реквизиты, но уведомляет контроллер onBlur?
<Button onClick={() => console.log("clicked")}>Click</Button>.Управляемый компонент - это компонент, который получает измененное значение от функции обратного вызова, а неуправляемый компонент - это компонент, который имеет значение из DOM. Например, при изменении входного значения мы можем использовать функцию onChange в контролируемом компоненте, а также мы можем получить значение, используя DOM, например ref.