npm
o pnpm
.npm create vite@latest mi-app -- --template react
cd mi-app
npm install
npm run dev
Abre la URL que muestra la terminal para ver tu aplicación en el navegador 🚀.
index.html
— punto de entrada del DOM.src/main.jsx
— arranca React y monta el árbol de componentes.src/App.jsx
— componente raíz de la aplicación.src/assets/
— recursos estáticos (imágenes, estilos, etc.).props
).Los componentes son la piedra angular de cualquier aplicación en React. Representan piezas independientes y reutilizables de la interfaz de usuario (UI), que se combinan para formar interfaces completas.
React se basa en la idea de descomponer la UI en pequeños bloques con su propia lógica y estructura.
Ejemplo:
<ProductCard />
— muestra información de un producto.<ShoppingCart />
— gestiona los artículos seleccionados.<UserProfile />
— muestra los datos del usuario.En React, los componentes se organizan en un árbol jerárquico donde los padres contienen hijos.
props
.function App() {
return (
<div>
<Header />
<MainContent />
<Footer />
</div>
);
}
Ambos pueden hacer lo mismo, pero los componentes funcionales son el estándar actual con Hooks.
export default function Saludo() {
return <h2>¡Hola desde un componente funcional!</h2>;
}
import React, { Component } from "react";
class Saludo extends Component {
render() {
return <h2>¡Hola desde un componente de clase!</h2>;
}
}
export default Saludo;
Una de las grandes ventajas de React es la posibilidad de reutilizar componentes.
Ejemplo: un componente <BotonEnviar />
puede reutilizarse en varios formularios.
function Saludo({ nombre }) {
return <h3>Hola, {nombre}!</h3>;
}
// Uso
<Saludo nombre="Ana" />
Las props son inmutables, mientras que el estado cambia con funciones como setState
o useState
.
Característica | Funcional | De Clase |
---|---|---|
Sintaxis | Función JavaScript | Clase ES6 |
Estado | Hooks (useState ) |
this.state |
Ciclo de vida | useEffect |
Métodos como componentDidMount |
Popularidad | Alta (actual estándar) | Baja (uso legado) |
<Saludo />
que reciba una prop nombre
.<Contador />
que tenga un estado con un número y un botón para incrementarlo.App.jsx
.// src/App.jsx
export default function App() {
return <h1>¡Hola, React!</h1>;
}
// src/main.jsx
import React from "react";
import { createRoot } from "react-dom/client";
import App from "./App.jsx";
createRoot(document.getElementById("root")).render(
<React.StrictMode><App /></React.StrictMode>
);
className
en lugar de class
.{ }
.const nombre = "Ana";
return <h2>Hola, {nombre}</h2>;
function Saludo({ nombre }) {
return <p>Hola, {nombre}!</p>;
}
export default function App() {
return <Saludo nombre="Mundo" />;
}
Las props son datos que fluyen del padre al hijo y son de solo lectura.
import { useState } from "react";
export default function Contador() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
Clics: {count}
</button>
);
}
El estado permite que la UI se actualice cuando cambian los datos.
const frutas = ["🍎", "🍌", "🍊"];
return (
<ul>{frutas.map((f, i) => <li key={i}>{f}</li>)}</ul>
);
{frutas.length === 0
? <p>Sin datos</p>
: <p>Hay {frutas.length} frutas</p>}
App.jsx
para mostrar un saludo con tu nombre.<Contador />
usando useState
.