Mostrando entradas con la etiqueta renderizado. Mostrar todas las entradas
Mostrando entradas con la etiqueta renderizado. Mostrar todas las entradas

jueves, 14 de agosto de 2025

Tecnologías de frontend para un periodontograma (visualización y renderizado)

 

Consigna: Visualización y Renderizado (25 puntos)

¿Qué tecnologías de frontend (HTML/CSS/JS) son las más adecuadas para renderizar el diagrama de un periodontograma en una aplicación web y por qué?

  • Opción A: Tablas HTML (<table>).

  • Opción B: Elementos <div> con CSS.

  • Opción C: Elementos <svg> (Scalable Vector Graphics) o <canvas>.

Justifica tu respuesta explicando las ventajas y desventajas de la opción que elijas para un caso de uso como el periodontograma, donde se requiere interactividad y precisión.


Respuesta

Opción C. Justificación:

SVG (Scalable Vector Graphics): Ideal para representar la forma de los dientes y las encías. Permite manipular cada diente como un objeto independiente (clic, hover, etc.).

Canvas API: Más útil para gráficos complejos o con muchos datos que necesitan ser renderizados rápidamente. Podría ser la base para animar la visualización o renderizar una cuadrícula detallada.


Devolución

¡Claro! La Opción C es la respuesta correcta y tu justificación es muy acertada. Has identificado las fortalezas clave de cada tecnología para este caso de uso.


Análisis de la respuesta

Has acertado al elegir <svg> y <canvas> como las mejores tecnologías para el renderizado de un periodontograma, y tu razonamiento es muy preciso. Aquí hay un desglose más detallado:

  • SVG (Scalable Vector Graphics): Es la mejor opción para la mayoría de los componentes del periodontograma (dientes, raíces, encías). Como mencionaste, SVG permite tratar cada elemento como un objeto independiente. Esto significa que puedes asignar id a cada diente, a cada punto de medición y a cada línea. Esto es fundamental para la interactividad: cuando el usuario hace clic en un diente o un punto, puedes saber exactamente qué elemento fue seleccionado y actualizar los datos asociados. Además, SVG es escalable, lo que asegura que el diagrama se verá nítido en cualquier resolución de pantalla, algo crítico para una aplicación profesional.

  • Canvas API: Aunque SVG es ideal para los elementos principales, Canvas es una excelente alternativa para elementos más dinámicos o complejos. Podría usarse para, por ejemplo, trazar las líneas de la profundidad de sondaje o los contornos de la recesión gingival de manera programática. En un caso muy complejo, se podría usar para renderizar todo el diagrama, pero requeriría más lógica para gestionar la interactividad (tendrías que calcular las coordenadas de los clics manualmente). Sin embargo, en un escenario híbrido, Canvas podría ser muy útil para superponer datos o animaciones sobre un diagrama base hecho con SVG.


Desventajas de las otras opciones

  • Opción A (Tablas HTML): Las tablas están diseñadas para datos tabulares y no para gráficos complejos. Sería casi imposible representar la forma de un diente y su posición en la arcada dental de manera precisa y visualmente atractiva con solo una tabla. La interactividad sería muy limitada y el diseño no sería responsivo.

  • Opción B (Elementos <div>): Aunque los divs son muy flexibles, replicar la forma de un diente y la estructura del periodontograma con divs y CSS sería extremadamente difícil y poco eficiente. Además, el rendimiento podría degradarse al intentar manejar muchos elementos complejos y superpuestos, lo que es un desafío en una interfaz de usuario rica en datos como esta.


sábado, 9 de agosto de 2025

La navegación con React e Inertia

 No entiendo si cuando uso React con Inertia, cada vez que hago click en un botón o enlace si se recarga la página o se redibuja sólo la parte que cambia.

Este planteo toca el corazón de lo que hace a Inertia tan especial.

Cuando utilizas React con Inertia.js y haces clic en un enlace o botón (<Link> de Inertia) que navega a una nueva página en tu aplicación, no se recarga la página completa. En su lugar, Inertia intercepta la solicitud, recupera los nuevos datos y el componente de React para la página de destino a través de una llamada AJAX, y luego redibuja solo el componente de React que cambia.


¿Cómo funciona?

  1. Primera carga: Cuando entras a tu aplicación por primera vez, tu servidor de Laravel/Rails/etc. renderiza la página completa, incluyendo tu componente raíz de React y los datos iniciales.

  2. Navegaciones siguientes:

    • Haces clic en un enlace de Inertia (ej., <Link href="/dashboard">).

    • Inertia intercepta este clic y envía una solicitud AJAX a la nueva URL (/dashboard).

    • El servidor procesa la solicitud, ejecuta el controlador de Laravel, y en lugar de devolver HTML completo, devuelve una respuesta JSON de Inertia que contiene:

      • El nombre del componente de React que debe renderizar (ej., Dashboard.jsx).

      • Los props que ese componente necesita (los datos).

    • Inertia recibe esta respuesta y simplemente le dice a tu aplicación de React: "Toma, aquí tienes el nuevo componente y sus datos, ¡renderízalo!".

    • React, gracias a su Virtual DOM, solo actualiza las partes de la página que han cambiado. Por lo tanto, no hay un parpadeo ni una recarga completa del navegador.


Lo que significa en la práctica:

  • Experiencia de usuario fluida: El usuario tiene la sensación de estar en una aplicación de una sola página (SPA), con transiciones rápidas y sin recargas de página.

  • Estado persistente: El estado de tu aplicación (como la barra de navegación, el reproductor de música, o cualquier otro layout principal) se mantiene porque solo la "página" principal dentro de ese layout cambia.

  • Simpleza de desarrollo: No tienes que escribir un API por separado para tu frontend. Puedes seguir escribiendo tus rutas y controladores de Laravel/Rails de la forma tradicional, y Inertia se encarga de la comunicación entre el backend y el frontend.

En resumen, la belleza de Inertia es que te da lo mejor de ambos mundos: la experiencia de una SPA con la simplicidad de un desarrollo "monolítico" tradicional. La página solo se redibuja de forma inteligente, no se recarga.


¿Cómo sabe Inertia qué partes de la página pertenecen al estado persistente?

Inertia no sabe por sí mismo qué partes de tu página son persistentes. Eres tú, como desarrollador, quien se lo indica de manera explícita a través de dos mecanismos principales: layouts persistentes y recargas parciales de datos.


1. Layouts Persistentes (Persistent Layouts)

Esta es la forma más común de mantener el estado de componentes estructurales, como una barra de navegación o un pie de página. El concepto es que tienes un componente de React que actúa como el "layout" principal y envuelve todos los demás componentes de página.

Cuando navegas a una nueva página, Inertia solo reemplaza el componente interno de la página, pero el componente de layout exterior permanece montado y su estado se conserva.

¿Cómo lo defines?

Esto se configura en tu archivo resources/js/app.js al inicializar Inertia. En lugar de simplemente resolver el componente de la página, defines una función que le permite a Inertia saber que debe usar un layout principal.

JavaScript
import { createInertiaApp } from '@inertiajs/react';
import Layout from './Shared/Layout'; // Tu componente de layout

createInertiaApp({
  resolve: (name) => {
    const pages = import.meta.glob('./Pages/**/*.jsx', { eager: true });
    // Importa el componente de la página, pero luego le aplica el layout
    let page = pages[`./Pages/${name}.jsx`];
    page.default.layout = page.default.layout || ((page) => <Layout children={page} />);
    return page;
  },
  setup({ el, App, props }) {
    createRoot(el).render(<App {...props} />);
  },
});

En este ejemplo, cuando navegas a /dashboard, Inertia cargará el componente Dashboard.jsx y lo pasará como children al componente Layout.jsx, que ya está montado. El estado del layout (por ejemplo, si un menú lateral está abierto) se mantendrá sin cambios.


2. Recargas Parciales (Partial Reloads)

Este mecanismo te permite conservar la mayoría de los datos de la página, pero actualizar solo una parte específica de ellos. Es útil cuando quieres actualizar un solo prop sin tener que recargar todos los demás datos.

¿Cómo lo defines?

Para una recarga parcial, debes indicarle a Inertia qué props quieres que se recarguen en tu solicitud. Esto se hace en un enlace o de forma programática.

HTML
<!-- En un enlace (por ejemplo, para actualizar un conteo de notificaciones) -->
<Link href="/posts" only={['notifications']}>Ver posts</Link>
```javascript
// O de forma programática con una recarga
import { router } from '@inertiajs/react';

// Solo actualiza los props 'notifications' y 'posts'
router.get('/posts', {
  only: ['notifications', 'posts'],
});

En este caso, Inertia envía la solicitud con una cabecera especial (X-Inertia-Partial-Data) que le dice al backend que solo debe devolver los props solicitados. Inertia luego fusiona esta nueva data con los props ya existentes en el frontend.

En resumen, la clave está en que la persistencia es una decisión de diseño de tu parte. Usas layouts para mantener la estructura y su estado, y recargas parciales para actualizar selectivamente los datos dentro de esa estructura.