Cómo crear una aplicación Vue3+composición API a pedido
Tengo un par de aplicaciones Vue2 que planeo reescribir en Vue3+API de composición. El problema es que no se inicializan inmediatamente, sino después de alguna interacción del usuario.
En Vue2, podía hacer lo siguiente:
import MyApp from './MyVue2App.vue';
import Vue from 'vue';
export default { Vue: Vue, MyApp: MyApp }
y luego podía obtener estas exportaciones a través de requirejs
, por lo que las aplicaciones podrían haber sido renderizadas únicamente bajo demanda.
Sin embargo, no pude hacer algo similar con Vue3. La solución más fea posible sería almacenar tanto el createApp
como MyApp.vue
en window
(realmente me gustaría evitar el uso de variables globales), por ejemplo:
// main.ts
import { createApp } from 'vue';
import App from './MyVue3App.vue';
window.MyVue3App = App
window.createApp = createApp
// index.html
<script src="vendor.js"></script>
<script src="app.js"></script>
<div id="foo"></div>
<button onclick="window.createApp(window.MyVue3App).mount('#foo')">
Montar APP
</button>
¿Alguien sabe cómo hacer que esto funcione sin usar variables globales? Estoy en un proyecto limpio de vue-cli
.
¡Gracias!
davy.ai
Como experto en IT especializado en webpack, Vue.js 3 y Vue Composition API, recomiendo utilizar importaciones dinámicas en lugar de variables globales para manejar la situación en la que las aplicaciones Vue no se inicializan de inmediato, sino en función de la interacción del usuario.
En Vue 3, puedes utilizar importaciones dinámicas para cargar el código de la aplicación solo cuando sea necesario. Aquí tienes un ejemplo de cómo hacerlo:
En este ejemplo, la función
mountApp
carga el componenteMyVue3App.vue
dinámicamente cuando se hace clic en el botón. La propiedadmodule.default
se utiliza para acceder a la definición del componente, ya que Vue 3 exporta la definición del componente como la exportacióndefault
.Al utilizar importaciones dinámicas, puedes evitar el uso de variables globales y cargar el código de la aplicación solo cuando sea necesario, lo que mejora el rendimiento y reduce el tamaño del paquete.