RosettaJS: Comparativas de Vue, React y Angular

Patrones de UI

Alternar Visibilidad

Alternar visibilidad permite mostrar u ocultar una parte de la interfaz sin dejar de mantenerla renderizada.

Ejemplo

Mostrar y ocultar un panel al pulsar un botón.

Vuev-show

<script setup lang="ts">
import { ref } from 'vue'

const isVisible = ref(false)

function togglePanel() {
  isVisible.value = !isVisible.value
}
</script>

<template>
  <button @click="togglePanel">
    Toggle panel
  </button>

  <p v-show="isVisible">Extra details</p>
</template>

Usa la directiva v-show para alternar la visibilidad sin sacar el elemento del DOM.

Reacthidden

import { useState } from 'react'

function TogglePanel() {
  const [isVisible, setIsVisible] = useState(false)

  function togglePanel() {
    setIsVisible(!isVisible)
  }

  return (
    <>
      <button onClick={togglePanel}>
        Toggle panel
      </button>

      <p hidden={!isVisible}>Extra details</p>
    </>
  )
}

El framework no tiene una API específica para este caso, así que se usa el atributo HTML nativo hidden.

Angular[hidden]

import { Component, signal } from '@angular/core'

@Component({
  selector: 'app-toggle-panel',
  standalone: true,
  template: `
    <button (click)="togglePanel()">
      Toggle panel
    </button>

    <p [hidden]="!isVisible()">Extra details</p>
  `,
})
export class TogglePanelComponent {
  isVisible = signal(false)

  togglePanel() {
    this.isVisible.update((value) => !value)
  }
}

Usa un property binding sobre hidden para alternar la visibilidad sin eliminar el elemento renderizado.