RosettaJS: Comparativas de Vue, React y Angular

Estado y reactividad

Valores Computados

Los valores computados (o derivados) permiten calcular un dato a partir de otros valores reactivos sin guardarlo como estado independiente.

Ejemplo

Actualizar una cantidad y mostrar un total calculado automáticamente.

Vuecomputed

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

const price = ref(8)
const quantity = ref(1)
const total = computed(() => price.value * quantity.value)

function incrementQuantity() {
  quantity.value++
}
</script>

<template>
  <button @click="incrementQuantity">
    Add item
  </button>

  <p>Total: {{ total }}</p>
</template>

Usa computed para derivar automáticamente un valor a partir de otros valores reactivos.

Reactderived value

import { useState } from 'react'

function CartTotal() {
  const price = 8
  const [quantity, setQuantity] = useState(1)
  const total = price * quantity

  function incrementQuantity() {
    setQuantity(quantity + 1)
  }

  return (
    <>
      <button onClick={incrementQuantity}>
        Add item
      </button>

      <p>Total: {total}</p>
    </>
  )
}

Calcula el total directamente durante el render a partir del estado disponible, sin guardarlo como estado adicional.

Angularcomputed

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

@Component({
  selector: 'app-cart-total',
  standalone: true,
  template: `
    <button (click)="incrementQuantity()">
      Add item
    </button>

    <p>Total: {{ total() }}</p>
  `,
})
export class CartTotalComponent {
  price = signal(8)
  quantity = signal(1)
  total = computed(() => this.price() * this.quantity())

  incrementQuantity() {
    this.quantity.update((value) => value + 1)
  }
}

Usa computed para derivar un valor a partir de otros signals sin convertirlo en estado independiente.