Globales de la API: General
version
Expone la versión actual de Vue.
Tipo
string
Ejemplo
jsimport { version } from 'vue' console.log(version)
nextTick()
Una utilidad para esperar la próxima actualización del DOM.
Tipo
tsfunction nextTick(callback?: () => void): Promise<void>
Detalles
Cuando se muta el estado reactivo en Vue, las actualizaciones del DOM resultantes no son aplicadas de forma sincrónica. En su lugar, Vue las almacena en el búfer hasta el "siguiente tick" para garantizar que cada componente se actualice sólo una vez, sin importar cuántos cambios de estado hayas realizado.
nextTick()
puede utilizarse inmediatamente después de un cambio de estado para esperar a que se completen las actualizaciones del DOM. Puedes pasar una función como argumento para ejecutarla al finalizar, o esperar (con await) la Promesa (Promise) devuelta.Ejemplo
vue<script setup> import { ref, nextTick } from 'vue' const count = ref(0) async function increment() { count.value++ // El DOM aún no ha sido actualizado console.log(document.getElementById('counter').textContent) // 0 await nextTick() // El DOM ahora está actualizado console.log(document.getElementById('counter').textContent) // 1 } </script> <template> <button id="counter" @click="increment">{{ count }}</button> </template>
Véase también
this.$nextTick()
defineComponent()
Un ayudante de tipo para definir un componente Vue con inferencia de tipo.
Tipo
ts// sintaxis de opciones function defineComponent( component: ComponentOptions ): ComponentConstructor // sintaxis de función (requiere 3.3+) function defineComponent( setup: ComponentOptions['setup'], extraOptions?: ComponentOptions ): () => any
El tipo está simplificado para facilitar la lectura.
Detalles
El primer argumento espera un objeto de opciones del componente. El valor de retorno será el mismo objeto de opciones, ya que la función es esencialmente un no-op en tiempo de ejecución para propósitos de inferencia de tipo solamente.
Tenga en cuenta que el tipo de retorno es un poco especial: será un tipo de constructor cuyo tipo de instancia es el tipo de instancia del componente inferido en base a las opciones. Esto será usado para la inferencia de tipo cuando el tipo devuelto se utiliza como una etiqueta en TSX.
Puede extraer el tipo de instancia de un componente (equivalente al tipo de
this
en sus opciones) del tipo de retorno dedefineComponent()
así:tsconst Foo = defineComponent(/* ... */) type FooInstance = InstanceType<typeof Foo>
Signatura de Función
defineComponent()
también tiene una signatura alternativa que está pensada para ser utilizada con Composition API y funciones render o JSX.En lugar de pasar un objeto de opciones, se espera una función. Esta función trabaja igual que la función
setup()
de la Composition API: recibe los props y el contexto de setup. El valor de retorno debe ser una función de renderizado - se admiten tantoh()
como JSX:jsimport { ref, h } from 'vue' const Comp = defineComponent( (props) => { // utiliza aquí la Composition API como en <script setup>. const count = ref(0) return () => { // función de renderizado o JSX return h('div', count.value) } }, // opciones extra, por ejemplo declarar props y emits { props: { /* ... */ } } )
El principal caso de uso de esta signatura es su uso con TypeScript (y en particular con TSX), ya que soporta genéricos:
tsxconst Comp = defineComponent( <T extends string | number>(props: { msg: T; list: T[] }) => { // utiliza aquí la Composition API como en <script setup>. const count = ref(0) return () => { // función de renderizado o JSX return <div>{count.value}</div> } }, // la declaración manual de props en tiempo de ejecución // sigue siendo necesaria. { props: ['msg', 'list'] } )
En el futuro, planeamos proporcionar un plugin de Babel que automáticamente infiera e inyecte los props en tiempo de ejecución (como para
defineProps
en SFCs) para que la declaración de props en tiempo de ejecución pueda ser omitida.Nota sobre el Treeshaking de webpack
Dado que
defineComponent()
es una llamada a una función, podría parecer que produce efectos secundarios a algunas herramientas de compilación, por ejemplo, webpack. Esto evitará que se aplique tree-shaken al componente incluso cuando el componente nunca se utilice .Para indicarle a webpack que esta llamada a la función es segura para el tree-shaken, puedes añadir una anotación de comentario
/*#__PURE__*/
antes de la llamada a la función:jsexport default /*#__PURE__*/ defineComponent(/* ... */)
Tenga en cuenta que esto no es necesario si está utilizando Vite, porque Rollup (el bundler de producción subyacente utilizado por Vite) es lo suficientemente inteligente como para determinar que
defineComponent()
está de hecho libre de efectos secundarios sin necesidad de anotaciones manuales.Véase también Guía - Usando Vue con TypeScript
defineAsyncComponent()
Define un componente asíncrono que se carga dinámicamente sólo cuando se renderiza. El argumento puede ser una función de carga o un objeto de opciones para un control más avanzado del comportamiento de carga.
Tipo
tsfunction defineAsyncComponent( source: AsyncComponentLoader | AsyncComponentOptions ): Component type AsyncComponentLoader = () => Promise<Component> interface AsyncComponentOptions { loader: AsyncComponentLoader loadingComponent?: Component errorComponent?: Component delay?: number timeout?: number suspensible?: boolean onError?: ( error: Error, retry: () => void, fail: () => void, attempts: number ) => any }
Véase también Guía - Componentes Asíncronos
defineCustomElement()
Este método acepta el mismo argumento que defineComponent
, pero en su lugar devuelve un constructor nativo de la clase Custom Element.
Tipo
tsfunction defineCustomElement( component: | (ComponentOptions & { styles?: string[] }) | ComponentOptions['setup'] ): { new (props?: object): HTMLElement }
Tipo es simplificado para facilitar la lectura.
Detalles
Además de las opciones normales de los componentes,
defineCustomElement()
también soporta una opción especialstyles
, que debe ser una matriz de cadenas de reglas CSS, para proporcionar el CSS que debe inyectarse en la raíz de la sombra (shadow root) del elemento.El valor de retorno es un constructor de elemento personalizado que puede ser registrado usando
customElements.define()
.Ejemplo
jsimport { defineCustomElement } from 'vue' const MyVueElement = defineCustomElement({ /* opciones del componente */ }) // Registra el elemento personalizado customElements.define('my-vue-element', MyVueElement)
Véase también
Tenga en cuenta también que
defineCustomElement()
requiere configuración especial cuando se utiliza con componentes de un solo archivo.