Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

227
Visualizações
Agregar un nuevo elemento a una matriz de un objeto reactivo reemplaza todos los elementos de la matriz. ¿Por qué?

El principal problema está en el título. Supongo que ref() y reactive() de alguna manera están jugando entre sí, simplemente no sé cómo y qué podría hacer al respecto.

El componente que usa la tienda:

 <script setup> import { ref } from "vue"; import { store } from "@/store.js"; const game = ref({ date: null, location: null, length: null, }); </script> <template> <form @submit.prevent="store.addGame(game)"> <input v-model="game.date" type="date" required /> <input v-model="game.location" type="text" placeholder="Location" required /> <input v-model="game.length" type="number" placeholder="Length (in minutes)" required /> <button class="button" type="submit">Submit ✔</button> </form> </template>

El problema ocurre en la tienda, en la matriz de juegos, después de agregar un segundo o más elementos...

tienda.js:

 import { reactive } from "vue"; export const store = reactive({ games: [], addGame(game) { this.games.push(game); console.log(this.games); } });
about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

La razón es porque todos los objetos que empujas dentro de los games comparten la misma referencia. Para arreglar esto, haz este cambio en store.js

 import { reactive } from "vue"; export const store = reactive({ games: [], addGame(game) { this.games.push({...game}); // line changed console.log(this.games); } });
about 4 years ago · Santiago Trujillo Relatório

0

No es "reemplazar", toda la referencia del game a la misma variable reactiva definida en const game = ref() .

Cada vez que llamas a store.addGame(game) , agregas el mismo game a la tienda. Debido a que el game es reactivo, implementará automáticamente el último valor de entrada por v-model .

Si pones otro botón para comprobar el valor en tienda. Cambie el valor de entrada y luego haga clic en el botón Probar, también puede ver los cambios de store.games .

 <template> <form @submit.prevent="store.addGame(game)"> <input v-model="game.date" type="date" required /> <input v-model="game.location" type="text" placeholder="Location" required /> <input v-model="game.length" type="number" placeholder="Length (in minutes)" required /> <button class="button" type="submit">Submit ✔</button> </form> <button @click="console.log(store.games)">Test</button> </template>
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda