react-puro-19
  • React Puro - 19
  • code
    • README
    • README
    • README
    • README
    • README
    • README
    • README
    • README
  • 7-state-en-clases
    • Ejemplo inicial: un contador
    • Manejo de eventos
    • El state
    • Sintaxis limpia en Class Components
    • setState es Asincrónico
    • Fusión superficial vs profunda
  • 5-children
    • Personalizar Children antes de renderizar
    • PropTypes para Children
    • Los Children
    • Diferentes tipos de Children
    • Manejando uso Children
  • 13-hook-usereducer
    • Qué es un Reducer?
    • Un ejemplo más practico
    • Entonces, Redux murió?
  • 4-proptypes
    • Documentación y depuración incluida
    • PropTypes como documentación
    • Cómo validar, formas comunes
    • Ejemplo Tweet con PropTypes
  • 3-props
    • Comunicación con componentes Padre
    • Las Props:
    • Pasar Props
    • Recibir Props
    • Ejemplo Tweet con Props
  • 11-pensando-uso-state
    • "Tipos" de componentes
    • Qué colocar en el State
    • Dónde mantener el estado
    • Pensando declarativamente
  • 9-requests-api
    • Intro
    • Eligir libreria HTTP
    • Obtener datos y mostrarlos
  • 10-state-en-funciones
    • El useState Hook
    • Actualizar State basado en State anterior
    • State como un Array
    • Reglas de los Hooks
    • La "magia" de los Hooks
    • State como un Objeto
    • Intro Hooks
  • 15-api-context
    • Usando React API Context
    • Patrón "Slots"
    • Patrón "Render Props"
    • Intro API Context
    • Otros Patrones de Context
    • Ejemplo perforación de props
    • hook_usecontext
  • 8-ciclo-vida-componente
    • Fases
    • El ciclo
    • Manejo de errores
    • Desmontaje
    • Representación
    • Montaje
  • 14-hook-useeffect
    • Límite cuando se ejecuta un Effect
    • Hacer cambios visibles del DOM
    • Obtener datos (Fetch) con useEffect
    • Intro useEffect
    • Re-obtener datos (Re-Fetch) cuando cambian
    • Solo ejecución en montaje y desmontaje
  • 2-jsx
    • Ejemplo componente Tweet:
    • JSX:
    • Trabajando con JSX:
  • 12-controles-entrada
    • Entradas controladas
    • Entradas no controladas
  • 6-github-file-list
    • Parte 2: la Prop 'key'
    • Parte inicial
  • 1-hola_mundo
    • Hola mundo:
Con tecnología de GitBook
En esta página

¿Te fue útil?

  1. 12-controles-entrada

Entradas controladas

La razón por la que se les llama "controladas" es porque el usuario es responsable de controlar su estado. Debe pasar un valor y mantener ese valor actualizado a medida que el usuario escribe. Es un poco más de trabajoso, pero después de escribir muchos de ellos será natural.

En lugar del enlace bidireccional "mágico" (2-way binding) que tienen algunos frameworks, React hace las cosas explícitas. Así es como se ve una entrada controlada:

import React, { useState } from 'react';

const InputExample = () => {
    const [text, setText] = useState('');

    const handleChange = event => {
        setText(event.target.value);
    };

    return (
        <input
        type="text"
        value={text}
        onChange={handleChange}
        />
    );
}

En la parte superior de la función, se crea un estado para mantener el valor de la entrada y almacenarlo en text.

Luego está la función handleChange, actualiza text con el valor desde el evento. Se pasa como la prop onChange de la entrada, por lo que cada vez que se presiona una tecla, se llamará a la función handleChange con el valor actual de la entrada (todo, no solo la tecla más reciente).

También se esta pasando una prop value a la entrada, indicando de manera efectiva qué mostrar.

Imaginando que se tiene una entrada con el texto "Hola Mund" (sin la "o"), la secuencia de eventos que sucede cuando se escribe la letra final:

Ahora, tal vez se crea que parece ser mucho código para una entrada simple. Quiza, pero este método proporciona mucha utilidad.

Del ejemplo anterior, intentar eliminar o comentar la llamada a setText, luego intentar escribir en el cuadro de texto. Se esperaria, que no sucede nada porque el valor está fijo en el valor inicial.

Ahora, ¿qué sucede si se ignora por completo los datos del evento?

Intentar cambiar setText para ignorar los datos del evento y, en su lugar, siempre establecer el texto con el mismo valor, de esta manera:

import React, { useState } from 'react';

const TrickInput = () => {
    const [text, setText] = useState(
        'intentar escribir algo'
    );

    const handleChange = event => {
        setText('haha nada papu');
    };

    return (
        <input
        type="text"
        value={text}
        onChange={handleChange}
        />
    );
}

Se verá que la entrada impide los intentos de cambiarlo.

Esta técnica es útil si se necesita hacer algún tipo de validación o formato personalizado, porque puede hacerse ambas cosas en la función handleChange. No se quiere que el usuario escriba números? Eliminar los números antes de actualizar el estado:

const NoNumbersInput = () => {
    // ...
    const handleChange = event => {
        let text = event.target.value;
        setText(
            text.replace(/[0-9]/g, '')
        );
        };
        // ...
    }

Intentar escribir algunos números en el cuadro de texto. Intentar pegar una cadena que contenga números. Sin comportamiento extraño.

Y asi se puede formatear la entrada valida de cosas como un número de teléfono, número de tarjeta de crédito, o hacer cambios en respuesta a la posición del cursor.

Pero tal vez no importe todo eso. Si solo se desea que la entrada administre su propio estado. Las entradas no controladas lo harán, con algunas advertencias.

Anterior12-controles-entradaSiguienteEntradas no controladas

Última actualización hace 5 años

¿Te fue útil?

captura