Respostas:
Isso está relacionado aos componentes DOM com estado (elementos do formulário) e os documentos do React explicam a diferença:
propse notifica as alterações por meio de retornos de chamada como onChange. Um componente pai o "controla" manipulando o retorno de chamada e gerenciando seu próprio estado e passando os novos valores como acessórios para o componente controlado. Você também pode chamar isso de "componente burro".refpara encontrar seu valor atual quando necessário. É um pouco mais parecido com o HTML tradicional.A maioria dos componentes do formulário React nativos suportam o uso controlado e não controlado:
// 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>
Na maioria (ou em todos) os casos, você deve usar componentes controlados .
statevez de props?
props. Um componente não controlado seria usado statepara controlar o próprio valor internamente. Esta é a principal diferença.
controlled components( <input type="text" value="value" onChange={handleChangeCallbackFn} />) em comparação com o HTML tradicional, onde um elemento de entrada manipula seu próprio valor e pode ser lido por meio de refscalled uncontrolled components( <value type="text" />). Os componentes controlados estão gerenciando seu próprio estado por meio setStateou obtendo-o de seu componente pai como suporte.
defaultValuepor adereços, mas que notifica o controlador onBlur?
<Button onClick={() => console.log("clicked")}>Click</Button>.