Tengo un problema extraño al usar emit en Vue 3 Composición API + Vite.
Quiero hacer una emisión simple de un componente secundario a uno principal.
El código del niño:
<template> <div class="main-stats"> <v-container @click="logInWithSpotify" class="boton-login"> Iniciar sesión con Spotify </v-container> </div> </template> <script setup> const emits = defineEmits(["logInIsCorrect"]); function logInWithSpotify() { emits.logInIsCorrect(true); } </script> El único propósito del hijo es presionar el botón y llamar al emisor al padre a través de un método personalizado llamado logInWithSpotify()
El código del padre:
<template> <v-app> <v-main class="main"> <v-template v-if="userIsLoged"> <MainStats /> </v-template> <v-template v-else> <Login @logInIsCorrect="setLogInIsCorrect" /> </v-template> </v-main> </v-app> </template> <script setup> import { ref, defineAsyncComponent } from "vue"; import Login from "./components/Login.vue"; const MainStats = defineAsyncComponent(() => import("./components/MainStats.vue")); const userIsLoged = ref(false); function setLogInIsCorrect(value) { console.log(value); userIsLoged.value = value; } </script>El comportamiento esperado es que cuando se presiona el botón del componente secundario, el emisor que tiene un parámetro "verdadero" llega al principal y cambia la variable userIsLogged a ese "verdadero".
Lo curioso es que ayer el código funcionaba perfectamente, hoy no.
En la consola, aparece:
Oye, estoy editando mi respuesta:
Siento que el problema está en tu setup
<script setup> const emits = defineEmits(["logInIsCorrect"]); function logInWithSpotify() { emits.logInIsCorrect(true); } </script>Después de leer este blog rápido: https://www.angularfix.com/2022/03/uncaught-typeerror-emit-is-not-function.html
no seria asi:
<script setup> const emits = defineEmits(["logInIsCorrect"]); function logInWithSpotify(val) { emits(logInIsCorrect, val); } </script> Y luego pasas tu Val a LoginWithSpotify(true)