src/components/ — componentes reutilizables.src/App.jsx — lógica principal y composición.src/context/ — estado global (opcional).tests/ — pruebas unitarias y de integración.// App.jsx
import Header from "./components/Header";
import TaskForm from "./components/TaskForm";
import TaskList from "./components/TaskList";
export default function App() {
return (
<div>
<Header />
<TaskForm />
<TaskList />
</div>
);
}
El componente App orquesta toda la aplicación.
Ejemplo de prueba unitaria de un componente:
// tests/Header.test.jsx
import { render, screen } from "@testing-library/react";
import Header from "../src/components/Header";
test("renderiza el título", () => {
render(<Header />);
expect(screen.getByText("Lista de Tareas")).toBeInTheDocument();
});
// tests/TaskForm.test.jsx
import { render, screen, fireEvent } from "@testing-library/react";
import TaskForm from "../src/components/TaskForm";
test("agrega una nueva tarea", () => {
render(<TaskForm onAgregarTarea={() => {}} />);
const input = screen.getByPlaceholderText("Nueva tarea...");
fireEvent.change(input, { target: { value: "Estudiar React" } });
fireEvent.submit(input.closest("form"));
expect(input.value).toBe(""); // se limpia el campo
});
npm run build genera la versión optimizada.dist/.npm i -g vercel.vercel en el proyecto.useMemo y React.memo en listas grandes.Header, TaskForm, TaskList) en App.jsx.npm run build y despliega tu app en Vercel o Netlify.