Hola y bienvenidos a mi nuevo artículo sobre React. Hoy vamos a ver cómo podemos crear un fragment con React.
Un fragment, es un espacio en la pantalla que se cambia cuando pulsamos un botón o un menú.
Para crear este fragment, primero vamos a crear el menú que permite cambiar de pantalla:
Lo llamamos menu.tsx
import React, { useState, useEffect } from 'react'; export enum SectionMenu{ Inicio = 'Inicio', Datos = 'Datos', } interface Props { setContent: React.Dispatch<React.SetStateAction<SectionMenu>>; content: SectionMenu; } const Menu: React.FC<Props> = ({ setContent, content }) => { const handleButtonClick = (newContent: SectionMenu) => { setContent(newContent); }; const [hasOverflow, setHasOverflow] = useState(false); useEffect(() => { const handleResize = () => { const element = document.getElementById('menu-dashboard-container'); if (element) { setHasOverflow(element.scrollWidth > element.clientWidth); } }; window.addEventListener('resize', handleResize); handleResize(); return () => { window.removeEventListener('resize', handleResize); }; }, []); const menuItems = [ { label: 'Inicio', section: SectionMenu.Inicio }, { label: 'Datos', section: SectionMenu.Datos }, // Agrega más elementos según sea necesario ]; return ( <div id="menu-dashboard-container" style={{ display: 'flex', flexDirection: 'row', overflowX: hasOverflow ? 'auto' : 'hidden', justifyContent: hasOverflow ? 'flex-start' : 'center', padding: '10px', }} > {menuItems.map((item) => ( <button key={item.section} onClick={() => handleButtonClick(item.section)} style={{ backgroundColor: content === item.section ? 'blue' : 'inherit', color: 'gray ', marginRight: '10px', border: 'none', cursor: 'pointer', padding: '8px 16px', }} > {item.label} </button> ))} </div> ); }; export default Menu;
Este componente tiene esta forma:
Debes modificar los colores y elementos que crean el menú.
Ahora vamos a crear una pantalla que contendrá el fragment que cambiará el contenido según lo que se pulse:
fragment.tsx
import React, { useState } from 'react'; import Menu, { SectionMenu } from './menu'; const DashboardScreen: React.FC = () => { const [content, setContent] = useState<SectionMenu>(SectionMenu.Inicio); const renderContent = () => { switch (content) { case SectionMenu.Inicio: return <div>Contenido de Inicio</div>; case SectionMenu.Datos: return <div>Contenido de Datos</div>; // Agrega más casos según sea necesario default: return null; } }; return ( <div> <Menu setContent={setContent} content={content} /> {renderContent()} </div> ); }; export default DashboardScreen;
Ahora que tenemos los dos componentes unidos, podemos ver cómo cambia de sección al pulsar al elemento inferior y sin tener que recargar toda la página.
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.