RosettaJS: Comparativas de Vue, React y Angular

Comunicación entre Componentes

Pasar Contenido a un Componente Hijo

Este patrón permite que un componente padre pase contenido renderizable a un componente hijo para que este decida dónde mostrarlo.

Ejemplo

Insertar un texto dentro de una tarjeta definida por un componente hijo.

Vueslot

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

<template>
  <CardBox>
    Hello from the parent
  </CardBox>
</template>
// CardBox.vue
<template>
  <section>
    <slot />
  </section>
</template>

Usa slots para permitir que el componente hijo renderice contenido recibido desde el padre en una posición concreta del template.

Reactchildren

function App() {
  return (
    <CardBox>
      Hello from the parent
    </CardBox>
  )
}
// CardBox.tsx
type CardBoxProps = {
  children: React.ReactNode
}

function CardBox({ children }: CardBoxProps) {
  return <section>{children}</section>
}

Usa la prop especial children para que el componente hijo renderice contenido anidado enviado por el padre.

Angularng-content

import { Component } from '@angular/core'
import { CardBoxComponent } from './card-box.component'

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [CardBoxComponent],
  template: `
    <app-card-box>
      Hello from the parent
    </app-card-box>
  `,
})
export class AppComponent {}
// card-box.component.ts
import { Component } from '@angular/core'

@Component({
  selector: 'app-card-box',
  standalone: true,
  template: `
    <section>
      <ng-content />
    </section>
  `,
})
export class CardBoxComponent {}

Usa ng-content para proyectar dentro del componente hijo el contenido que se declara entre sus etiquetas desde el padre.