Función expose() de Vue3
En Vue3,expose()la función es una herramienta utilizada en la API de Composition para exponer métodos y propiedades internos del componente.
expose()Normalmente se combina consetup()la función, lo que permite a los desarrolladores especificar explícitamente qué propiedades y métodos internos del componente pueden ser accedidos desde el exterior.
¿Por qué se necesita la función expose()?
En Vue2, las propiedades y métodos del componente son públicos por defecto y se puede acceder a ellos directamente desde el exterior. Sin embargo, este diseño puede causar algunos problemas, como:
- Problemas de seguridad: los métodos internos pueden quedar expuestos accidentalmente, lo que podría provocar operaciones inseguras.
- Problemas de mantenimiento: es difícil rastrear qué propiedades y métodos se utilizan externamente, lo que aumenta la complejidad del mantenimiento.
Vue3 introduceexpose()la función, que permite a los desarrolladores controlar con mayor precisión la interfaz pública del componente, resolviendo así los problemas mencionados.
¿Cómo usar la función expose()?
Sintaxis básica
Ejemplo
setup(props, context) {
const internalMethod = () => {
console.log('This is an internal method');
};
const publicMethod = () => {
console.log('This is a public method');
};
// Exponer el método publicMethod
context.expose({
publicMethod
});
return {
internalMethod
};
}
};
Explicación
En el código anterior, definimos dos métodos:internalMethodypublicMethod. Mediantecontext.expose(), solo exponemospublicMethod, mientras queinternalMethodno será accesible desde el exterior.
Escenarios de ejemplo
1. Comunicación entre componentes padre e hijo
Supongamos que tenemos un componente padre y un componente hijo; el padre necesita llamar a un método del componente hijo.
Componente hijo
Ejemplo
setup(props, context) {
const childMethod = () => {
console.log('Child method called');
};
context.expose({
childMethod
});
return {};
}
};
Componente padre
Ejemplo
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent
},
setup() {
const childRef = ref(null);
onMounted(() => {
if (childRef.value) {
childRef.value.childMethod();
}
});
return {
childRef
};
}
};
2. Encapsular una biblioteca de componentes
Al desarrollar una biblioteca de componentes, es posible que deseemos exponer solo una parte de los métodos y propiedades para mantener la encapsulación y seguridad del componente.
Ejemplo
setup(props, context) {
const internalState = ref('internal state');
const publicState = ref('public state');
const publicMethod = () => {
console.log('Public method called');
};
context.expose({
publicState,
publicMethod
});
return {
internalState
};
}
};
Precauciones
- Llamadas múltiples a expose(): si se llama varias veces
expose(), solo se expondrá el contenido de la última llamada. - Uso combinado con ref: en el componente padre, se puede
refhacer referencia al componente hijo y llamar a sus métodos expuestos. - Compatibilidad:
expose()es una característica nueva de Vue3; asegúrate de que tu proyecto use Vue3 o una versión superior.
Otras extensiones
API de opciones de Vue3