Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
Cuando actualizamos una variable state, automáticamente, en caso de ser necesario, el código html vinculado a esa variable es actualizado.
La diferencia entre un estado de React y una variable normal es que cuando un estado cambia, el componente es renderizado de nuevo y se ejecutarán los useEffect vinculados a ese estado, pero cuando cambia una variable normal, esto no ocurre.
Por otro lado, el ciclo de vida de una variable normal acaba en cada render, ya que se vuelve a generar otra. En el caso de un esto, su valor es conservado a través de los sucesivos renders.
Los hooks (useState y useEffect)fueron introducidos en la versión 16.8 de react. Por tanto, para utilizarlos, deberemos tener al menos esta versión en el package.json
"dependencies": {
"react": "^16.8.6",
"react-dom": "^16.8.6",
Modificar un estado
Cuando queremos modificar un estado, utilizaremos el segundo parámetro que devuelve la función useState, que al ejecutarla nos guardará el parámetro que le pasemos como nuevo valor del estado.
import {useState} from 'react';
const MyCounter = () =>{
const [contador, setContador] = useState(0);
const incrementarContador = () => setContador(contador + 1)
return <button onClick={incrementarContador}>{contador}</button>
}
export default MyCounter;
Ejercicios useState y useRef
Ahora modificaremos los ejercicios que vimos en la sección de useRef para utilizar useState a la hora de mostrar el resultado. Seguiremos utilizando useRef para la recogida de valores.
1. Euros a dólares
Hay que realizar un conversor de euros a dólares. Supondremos que un euro son dos dólares. El usuario introducirá un valor en euros y se mostrará un mensaje en pantalla con el correspondiente valor en dólares.
2. Grados centígrados
Hay que realizar un conversor de grados Centígrados a grados Fahrenheit.
Para ello deberé multiplicar por 9/5 y sumar 32. Como todo el mundo sabe, 20 grados centígrados son 68 grados Farenheit.
Con useState también podemos recoger un valor del usuario
Si queremos recoger un valor introducido por el usuario, también usaremos useState. No obstante, es posible hacer esto utilizando el método useRef, pero dado que este no funciona en ReactNative, no lo vamos a ver.
import { useState } from 'react';
const App = () => {
const [inputText, setInputText ] = useState('');
return (
<div>
<input type="text" onChange={e => setInputText(e.target.value)} />
<div>{ inputText }</div>
</div>
);
}
export default App;
En el caso de que quisieramos saber si una checkbox está marcada o no, usaríamos la propiedad checked:
<input type="checkbox" onclick={e=> setEstaMarcado(e.target.checked)}/>
Ejercicios únicamente usando useState
Ahora modificaremos los ejercicios que vimos en la sección de useRef para utilizar useState en su lugar.
La solución debe ir imprimendose a medida que vamos introduciendo los datos, sin que sea necesario pulsar ningún botón de «calcular».
1. Euros a dólares
Hay que realizar un conversor de euros a dólares. Supondremos que un euro son dos dólares. El usuario introducirá un valor en euros y se mostrará un mensaje en pantalla con el correspondiente valor en dólares.
2. Grados centígrados
Hay que realizar un conversor de grados Centígrados a grados Fahrenheit.
Para ello deberé multiplicar por 9/5 y sumar 32. Como todo el mundo sabe, 20 grados centígrados son 68 grados Farenheit.
Cambiar valor al hacer click en un botón, en lugar de cuando cambia el input
import { useState } from 'react';
const App = () => {
const [inputText, setInputText] = useState('');
const [valorAMostrar, setValorAMostrar] = useState(0);
return (
<div>
<input type="text" onChange={e=> setInputText(e.target.value)} />
<button onClick={() => setValorAMostrar(inputText)}>Cambiar valor</button>
<div>{valorAMostrar}</div>
</div>
);
}
export default App;
3. Calcular la superficie de un rectángulo
Tendremos un formulario que recogerá el ancho y el alto de un rectángulo y calculará su superficie.
4. Cambia imagen
Desarrollar la siguiente aplicación. Al pulsar sobre cada uno de los botones, debe cargarse la imagen correspondiente a una de las propiedades del siguiente objeto:
const ANIMAL_IMAGES = {
img1: "https://pablomonteserin.com/lorempixel/111x111",
img2: "https://pablomonteserin.com/lorempixel/222x222",
img3: "https://pablomonteserin.com/lorempixel/333x333",
};
