RosettaJS: Comparativas de Vue, React y Angular

Comunicación entre Componentes

Props Básicas

Las props permiten pasar datos de un componente padre a uno hijo para configurar su contenido o su comportamiento desde fuera.

Ejemplo

Pasar un nombre y un color desde un componente padre para personalizar el texto que muestra un componente hijo.

VuedefineProps

<script setup lang="ts">
import Greeting from './Greeting.vue'
</script>

<template>
  <Greeting name="John" color="blue" />
</template>
// Greeting.vue
<script setup lang="ts">
const props = defineProps<{
  name: string
  color: string
}>()
</script>

<template>
  <h1 :style="{ color: props.color }">
    Hello, {{ props.name }}!
  </h1>
</template>

Recibe las props con defineProps dentro del componente hijo para poder usarlas en su lógica o en su template.

Reactprops

function App() {
  return <Greeting name="John" color="blue" />
}
// Greeting.tsx
type GreetingProps = {
  name: string
  color: string
}

function Greeting({ name, color }: GreetingProps) {
  return <h1 style={{ color }}>Hello, {name}!</h1>
}

Recibe las props como argumentos del componente hijo para poder usarlas en su lógica o en su JSX.

Angularinput()

import { Component } from '@angular/core'
import { GreetingComponent } from './greeting.component'

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [GreetingComponent],
  template: `
    <app-greeting name="John" color="blue" />
  `,
})
export class AppComponent {}
// greeting.component.ts
import { Component, input } from '@angular/core'

@Component({
  selector: 'app-greeting',
  standalone: true,
  template: `
    <h1 [style.color]="color()">
      Hello, {{ name() }}!
    </h1>
  `,
})
export class GreetingComponent {
  name = input.required<string>()
  color = input.required<string>()
}

Declara inputs reactivos con input() dentro del componente hijo para poder usarlos en su lógica o en el template.