RosettaJS: Comparativas de Vue, React y Angular

Formularios

Binding Bidireccional de Datos

El binding bidireccional de datos mantiene sincronizado el valor de un campo con el estado del componente mientras el usuario escribe.

Ejemplo

Escribir un nombre en un campo de texto y mostrarlo actualizado al instante.

Vuev-model

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

const name = ref('')
</script>

<template>
  <input v-model="name" type="text" />

  <p>Name: {{ name }}</p>
</template>

Usa v-model para sincronizar automáticamente el valor del input con un estado reactivo.

Reactvalue + onChange

import { useState } from 'react'

function NameField() {
  const [name, setName] = useState('')

  return (
    <>
      <input
        type="text"
        value={name}
        onChange={(event) => setName(event.target.value)}
      />

      <p>Name: {name}</p>
    </>
  )
}

Controla el input pasando value y actualizando el estado con onChange en cada cambio.

Angular[(ngModel)]

import { Component } from '@angular/core'
import { FormsModule } from '@angular/forms'

@Component({
  selector: 'app-name-field',
  standalone: true,
  imports: [FormsModule],
  template: `
    <input [(ngModel)]="name" type="text" />

    <p>Name: {{ name }}</p>
  `,
})
export class NameFieldComponent {
  name = ''
}

Usa la directiva ngModel con la sintaxis [(...)] para sincronizar el input con el estado del componente.