Taller de React
25-layouts

Layouts

import { useState } from "react";

function Index() {
	return <div>In index</div>;
}

function Login() {
	return (
		<div className="my-auto mx-auto max-w-sm rounded bg-base-200 p-4 text-center">
			In Login
		</div>
	);
}

function Register() {
	return (
		<div className="my-auto mx-auto max-w-sm rounded bg-base-200 p-4 text-center">
			In Register
		</div>
	);
}

// Asume que lo siguiente no es modificable (como si se auto-generara)

const pages = {
	"/": Index,
	"/login": Login,
	"/register": Register,
};

type PagePath = keyof typeof pages;

// El componente App lo puedes modificar

export function App() {
	const [route, setRoute] = useState<PagePath>("/");
	const Page = pages[route]; // Importante! Prueba ver que pasa si lo dejas en minúscula

	//* ¿Como se puede hacer que Login y Register tengan un layout
	//* en común, dejando a Index con un layout por defecto?
	// ¿Puedes encontrar el problema que hay en la implementación actual?
	return (
		<div className="flex h-20 gap-3">
			<div className="flex items-center gap-4">
				{Object.keys(pages).map((path) => (
					<button
						className="btn"
						key={path}
						onClick={() => setRoute(path as PagePath)}
					>
						{path}
					</button>
				))}
			</div>
			<div className="divider divider-horizontal" />
			<Page />
		</div>
	);
}
In index