Resolviendo errores de $wire en devlog-ist/landing con Alpine.js

El Problema

En el proyecto devlog-ist/landing, nos encontramos con un error que afectaba la funcionalidad de Livewire. Específicamente, aparecía el error "$wire is not defined" en la página de reclutadores, impidiendo el correcto funcionamiento del autocompletado de tecnología. Este problema surgía debido a la coexistencia de dos instancias de Alpine.js.

La Solución

La raíz del problema era que Alpine.js se importaba e iniciaba tanto en app.js como en el propio paquete de Livewire 3, que incluye su propia instancia de Alpine.js con la magia de $wire. En las páginas que utilizaban componentes de Livewire, ambas instancias entraban en conflicto, y la instancia de app.js (que no incluía $wire) prevalecía, causando el error.

Para resolver este conflicto, implementamos la siguiente solución:

  1. Omitir Alpine.start() en app.js cuando Livewire ya lo ha iniciado. Esto asegura que solo haya una instancia activa de Alpine.js.
  2. Revertir la solución temporal e innecesaria $wire.entangle que se había implementado en un commit anterior.

Este es un ejemplo ilustrativo de cómo podríamos evitar la doble inicialización de Alpine.js en nuestro app.js:

// app.js

import Alpine from 'alpinejs';

if (typeof window.Livewire === 'undefined') {
    Alpine.start();
}

window.Alpine = Alpine;

En este fragmento de código, verificamos si Livewire ya ha sido inicializado antes de iniciar Alpine.js. Esto previene el conflicto entre las dos instancias y asegura que $wire esté correctamente definido.

Resolviendo errores de $wire en devlog-ist/landing con Alpine.js
Gerardo Ruiz

Gerardo Ruiz

Author

Share: