Respuestas:
Esto se relaciona con los componentes DOM con estado (elementos de formulario) y los documentos de React explican la diferencia:
propsy notifica cambios a través de devoluciones de llamada como onChange. Un componente principal lo "controla" manejando la devolución de llamada y administrando su propio estado y pasando los nuevos valores como accesorios al componente controlado. También podría llamar a esto un "componente tonto".refpara encontrar su valor actual cuando lo necesita. Es un poco más parecido al HTML tradicional.La mayoría de los componentes nativos de la forma React admiten el uso controlado y no 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>
En la mayoría (o en todos) de los casos , debe utilizar componentes controlados .
statelugar de props?
props. Un componente no controlado se usaría statepara controlar el valor en sí mismo internamente. Ésta es la diferencia clave.
controlled components( <input type="text" value="value" onChange={handleChangeCallbackFn} />) frente al HTML tradicional, donde un elemento de entrada maneja su propio valor y se puede leer a través de refsllamado uncontrolled components( <value type="text" />). Los componentes controlados gestionan su propio estado a través setStatede su componente principal o lo obtienen de él como accesorios.
defaultValuepor accesorios, pero que notifica al controlador onBlur?
<Button onClick={() => console.log("clicked")}>Click</Button>.