import React, { useState } from 'react'; const Contador = () => { // Quiero variables dentro de una página de react tengo que utilizar estado const [contador, setContador] = useState(0); const [cadena, setCadena] = useState("") const incrementarContador = () => { setContador(contador + 1); setCadena("") }; const decrementarContador = () => { if (contador>0) { setContador(contador - 1); }else{ setCadena("No puedes poner número negativos") } }; return ( <div> <p>Contador: {contador}</p> <p> {cadena}</p> <button onClick={incrementarContador}>Incrementar</button> <button onClick={decrementarContador}>Decrementar</button> <button onClick={() => setContador(0)}>Reset</button> </div> ); }; export default Contador;
Categoría: React
Solución 2
import Cabecera from './Cabecera'; import Boton from './Boton'; function Bloque({ texto }) { const pinchar=()=>{ console.log("Has pinchado el botón "+texto) } // Paso el evento del padre al hijo return <div> <Cabecera texto={texto} /> <Boton texto="Pincha aquí" evento={pinchar}/> </div>; } export default Bloque;
function Boton({ texto,evento }) { return <button onClick={evento}>{texto}</button>; } export default Boton;
Solución 1 evento botón
Pasar la información del padre al hijo
En bloque pasamos el texto al botón
import Cabecera from './Cabecera'; import Boton from './Boton'; function Bloque({ texto }) { // Paso la información del padre al hijo return <div> <Cabecera texto={texto} /> <Boton texto="Pincha aquí" bloque={texto}/> </div>; } export default Bloque;
function Boton({ texto,bloque }) { return <button onClick={()=>pinchar(bloque)}>{texto}</button>; } const pinchar=(texto)=>{ console.log("Has pinchado el botón "+texto) } export default Boton;
Pasar una función como propiedad
App.js
import './App.css'; // Estilos propios del componente import Tarjeta from './componentes/Tarjeta'; // Importo la tarjeta const foo=(elemento)=>{ console.log("Has pinchado en " + elemento.alt) if (elemento.alt === "Marie Curie") { elemento.src = "/img/ok.jpg" } } function App() { // Devuelvo un div con las tarjetas que quiera // la Tarjeta tiene unas propiedades que se pasan al componente // Pasamos el nombre y la url de la imagen return ( <div className="App"> <h1>¿Quien descubrió el radio?</h1> <Tarjeta nombre="Einstein" correcta="Marie Curie" foo={foo}/> <Tarjeta nombre="Marie Curie" correcta="Marie Curie" foo={foo}/> <Tarjeta nombre="Schrodinger" correcta="Marie Curie" foo={foo}/> </div> ); } export default App;
Tarjeta.js
import Foto from './Foto'; // Importo Foto import Cabecera from './Cabecera'; // Importo Cabecera // Tarjeta le paso las propiedades nombre y url // Esto va dentro de props pero uso destructuring function Tarjeta({nombre, correcta,foo}) { // En el div es donde pongo la clase, porque es elemento html // Uso los componentes Cabecera y Foto return ( <div className="tarjeta"> <Cabecera nombre={nombre} correcta={correcta}/> <Foto descripcion={nombre} foo={foo}/> </div> ) } export default Tarjeta;
Foto.js
function Foto({descripcion, foo}) { let ruta='/img/' let nombre=descripcion.toLowerCase().replaceAll(" ","")+".jpg" return <img onClick={(evt)=>{foo(evt.target)}} className="foto" src={ruta+nombre} alt={descripcion} /> } export default Foto;
Ejemplos eventos
App.js
import './App.css'; // Estilos propios del componente import Tarjeta from './componentes/Tarjeta'; // Importo la tarjeta function App() { // Devuelvo un div con las tarjetas que quiera // la Tarjeta tiene unas propiedades que se pasan al componente // Pasamos el nombre y la url de la imagen return ( <div className="App"> <h1>¿Quien descubrió el radio?</h1> <Tarjeta nombre="Einstein" correcta="Marie Curie" /> <Tarjeta nombre="Marie Curie" correcta="Marie Curie"/> <Tarjeta nombre="Schrodinger" correcta="Marie Curie"/> </div> ); } export default App;
Tarjeta.js
import Foto from './Foto'; // Importo Foto import Cabecera from './Cabecera'; // Importo Cabecera // Tarjeta le paso las propiedades nombre y url // Esto va dentro de props pero uso destructuring function Tarjeta({nombre, correcta}) { // En el div es donde pongo la clase, porque es elemento html // Uso los componentes Cabecera y Foto return ( <div className="tarjeta"> <Cabecera nombre={nombre} correcta={correcta}/> <Foto descripcion={nombre}/> </div> ) } export default Tarjeta;
Cabecera.js
const comprobar = (objeto, correcta) => { console.log("Has pinchado en " + objeto.innerHTML) if (objeto.innerHTML === correcta) { objeto.innerHTML = "Muy BIEN" } else { objeto.innerHTML = "INCORRECTO" } } function Cabecera({ nombre, correcta }) { return <h1 onClick={(event) => { comprobar(event.target, correcta) }} >{nombre}</h1>; } export default Cabecera;
Proyectos con react y node
13 cursos de react
Mini ejercicio react
Descargar el código de la cesta de la compra:
Y añadimos las siguientes mejoras:
1.- Botón en la cesta para eliminar completamente un producto
2.- Si la compra es superior a 1000 que se muestre un aviso de que se puede pagar en tres plazos
3.- Poder filtrar las carnes por el nombre.
Repositorios React to guapos
Ejercicio useReducer
Vamos a crear un formulario con dos inputs de type number y cuatro botones para sumar, restar, dividir y multiplicar. El resultado se mostrará en un div.
Para la lógica usaremos useReducer