Función inject() de Vue3
inject()La función es una API proporcionada por Vue3, utilizada en los componentes hijos para obtener del componente padre o de los componentes ancestros a través deprovide()las dependencias proporcionadas por la función. Se utiliza principalmente para la transmisión de datos entre componentes de diferentes niveles, especialmente cuando el árbol de componentes es profundo.
Sintaxis básica
Ejemplo
import { inject } from 'vue';
const value = inject(key, defaultValue);
const value = inject(key, defaultValue);
- key: un string o Symbol, que representa el identificador único de la dependencia que se necesita inyectar.
- defaultValue: Parámetro opcional, si no se encuentra la dependencia correspondiente, se devuelve el valor predeterminado.
Casos de uso
inject()Normalmente se usa junto conprovide()en combinación, adecuado para los siguientes escenarios:
- Comunicación entre componentes de distintos niveles: Cuando la jerarquía de componentes es profunda, a través de
provide()yinject()se puede evitar la molestia de pasar props capa por capa. - Gestión de estado global: En aplicaciones pequeñas, se puede usar
provide()yinject()en lugar de herramientas de gestión de estado como Vuex. - Desarrollo de plugins: Cuando se proporcionan funciones o configuraciones globales en un plugin,
inject()es una herramienta conveniente.
Ejemplo de código
El componente padre usa provide() para proporcionar datos
Ejemplo
import { provide, ref } from 'vue';
export default {
setup() {
const message = ref('Hello, Vue3!');
provide('message', message); // Proporcionar datos
}
};
export default {
setup() {
const message = ref('Hello, Vue3!');
provide('message', message); // Proporcionar datos
}
};
El componente hijo usa inject() para obtener datos
Ejemplo
import { inject } from 'vue';
export default {
setup() {
const message = inject('message', 'Default Message'); // Inyectar datos
return { message };
}
};
export default {
setup() {
const message = inject('message', 'Default Message'); // Inyectar datos
return { message };
}
};
Consideraciones
- Reactividad de las dependencias: Si a través de
provide()los datos proporcionados son reactivos (comoreforeactive), al usar en el componente hijoinject()los datos obtenidos también mantienen la reactividad. - Función del valor predeterminado: Si no se encuentra la dependencia correspondiente,
inject()se devolverá el valor predeterminado. Se recomienda establecer siempre un valor predeterminado para evitar errores en tiempo de ejecución. - Evitar el uso excesivo: Aunque
provide()yinject()es muy conveniente, su uso excesivo puede aumentar el acoplamiento entre componentes; se recomienda utilizarlo solo cuando sea necesario.
Otras extensiones
API de opciones de Vue3