Crear un componente de NavBar en React es un proceso fundamental para el diseño intuitivo de aplicaciones web. Este paso no solo mejora la interfaz de usuario, sino que también, cuando se realiza correctamente, fortalece la navegación y la experiencia del usuario final. Vamos a desglosar este proceso, desde la creación del componente hasta su implementación en la aplicación principal, además de contribuir con algunos estilos básicos con Tailwind CSS.
¿Cuál es la estructura básica del componente NavBar?
Para empezar, en nuestro proyecto, vamos a organizar todos los componentes dentro de una carpeta específica llamada components. Utilizamos un archivo llamado index.jsx para definir nuestro componente.
En esta estructura básica, se utilizan los enlaces de React Router para facilitar la navegación entre diferentes rutas dentro de la aplicación. También se recomienda utilizar direcciones de correo o datos no reales al desarrollar proyectos de ejemplo.
¿Cómo añadimos estilos al NavBar?
Los estilos básicos son clave para mejorar la apariencia de nuestro componente. Usando Tailwind CSS, que proporciona clases de utilidad rápidas y flexibles, podemos estructurar el componente NavBar de la siguiente manera:
Activar el Flexbox para los ul
Justificar el contenido de manera uniforme con justify-between
Centrarlos verticalmente usando items-center
<navclassName="flex justify-between items-center fixed w-full px-8 py-5"><ulclassName="flex gap-3"><li><NavLinkclassName="font-semibold text-lg"to="/">Shopee</NavLink></li><li><NavLinkto="/all">All</NavLink></li>{/* Más elementos aquí */}</ul><ulclassName="flex gap-3"><liclassName="text-black opacity-60">tef@platzi.com</li><li><NavLinkto="/my-orders">My Orders</NavLink></li>{/* Más elementos aquí */}</ul></nav>
¿Cómo indicamos qué página está activa?
React Router ofrece un atributo especial que podemos usar: isActive. Para resaltar la página activa, Tailwind ofrece la clase underline que podemos aplicar a través de la función de estilo className para saber qué elemento está seleccionado.
¿Cómo se importa el NavBar en el componente principal?
Una vez que tu NavBar está listo y correctamente estilizado, el siguiente paso es integrarlo dentro del componente principal de tu aplicación, habitualmente App.js.
importReactfrom'react';importNavBarfrom'./components/NavBar/index';constApp=()=>{return(<div><NavBar/>{/* Otros componentes y rutas aquí */}</div>);};exportdefaultApp;
Esta forma de trabajar con el NavBar resulta en un componente reutilizable y fácil de mantener, adaptando cualquier aplicación web a un formato más estándar y mejorando la navegación y experiencia del usuario. Por supuesto, con Tailwind CSS, puedes seguir personalizando los estilos a tu preferencia para que encajen perfectamente con el diseño de tu proyecto. Continúa explorando y aprendiendo para expandir aún más tus habilidades de desarrollo web. ¡Éxito en tu proyecto!
Si utilizaron arreglos para abstraer la informacion de cada NavLink para su componente. Se van a dar cuenta que el primer y segundo elemento se subrayan, ya que ambos tienen la misma direccion. Una solucion para este problema es agregar una nueva condicion al classname del componente Navlink.
Con esta solucion el elemento Shopi no se va a subrayar.
El arreglo del menu se ve de la siguiente forma:
Diferencias entre componentes: De react-router-dom
1)NavLink: Nos brinda un callback/funcion con un objeto con las propiedades: isActive y Pending. util para saber cuando un elemento esta activo o pendiente. su manera de uso popular es en los menu de navegacion, sin necesidad de recargar la pagina.
2)Link: No nos brinda nada y direcciona directamente a la ruta sin necesidad de recargar la pagina.
En vez de hardcodear todos los navs cree un archivo que contenga todas las rutas (izq y der) para que sea dinámico y con un .map se recorrer todas y pegarlas
Repeto el uso de TailwindCSS, creo que ayuda a muchos. Pero particularmente no me gusta como se vuleve un reguero de propiedades quitando la legibilidad de codigo de quien desarrolla!
a mi tampoco me gusta eso pero siempre lo he usado, tambien bootstrap, conoces otra opción que no sea usar css? pero al mismo tiempo solucione lo de muchas clases.
Un hack por si no lo sabían, en VScode le das a crear archivo y escribes ejem: Navbar/index.jsx
Automáticamente, te crea la carpeta y dentro el archivo y así no tienes que presionar: crear carpeta y luego crear archivo
La única diferencia es que mandé el estilo de activeStyle fuera de los componentes para no andarlo pasando como prop y adicional mandé una validación para no mostrar el underline en el logo.
Para tener un código más limpio y que luego sea mas fácil su mantenimiento y evolución yo hice lo siguiente:
// Cree un componente llamado NavItem que acepta las propiedades to, children y activeStyleconstNavItem=({ to, children, activeStyle })=>{return(// Use la etiqueta NavLink y le pasé las propiedades to y className<NavLink to={to} className={({ isActive })=>(isActive ? activeStyle :undefined)}>{children}</NavLink>);};
//Asi quedo el codigo en el componente NavBar usando map para recorrer los Links
import { NavLink } from "react-router-dom";
import {navIzq, navDer} from './Rutas'
Comparto mi código. En lo posible trato de hacer mis patrones de diseño lo más escalable posibles. En este caso, en vez de crear tantos NavLink, creé dos constantes, que me almacenaran tanto el titulo del nav y su path. Con esto si a futuro tengo que remover o agregar alguno, solo modifico la constante y resulta más cómodo y a nivel visual también es más entendible. Lo único que dejé fijo y fuera de las constantes fue el correo y el carrito de compra. Que los puse textualmente ahí: