Что такое контролируемые компоненты и неконтролируемые компоненты в 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.