Mostrar los datos cargados entre llaves utilizando la API de composición de Vue 3.
¿Alguien puede explicar la diferencia entre lo siguiente, por favor?
Versión de la API de opciones
Muestra los datos cargados en el DOM como se espera.
export default {
data() {
return {
config: {},
};
},
async mounted() {
this.config = await fetch('/path/to/file.json');
},
template: `<div>{{ config }}</div>`
}
Versión de la API de composición
Muestra el estado inicial de config pero no los datos cargados.
import { onMounted, reactive } from 'vue';
export default {
setup() {
let config = reactive({});
onMounted(async () => {
config = await fetch('/path/to/file.json');
});
return {
config,
};
},
template: `<div>{{ config }}</div>`
}
Sospecho que la función reactive()
está siendo sobreescrita por la carga de datos asíncronos (y puedo imprimir el nuevo dato en la función onMounted
), pero no puedo encontrar nada en la documentación que indique cómo actualizar en masa un objeto reactivo como este (especialmente cuando funciona en la API de opciones).
Edit: Pensamientos finales:
He comenzado a utilizar objetos reactive
para proporcionar e inyectar datos en la aplicación y luego utilizar toRefs
como una forma JIT de proporcionar datos reactivos a mis vistas. Esto parece ser lo mejor de ambos mundos.
Ejemplo:
import { onMounted, reactive, toRefs } from 'vue';
export default {
setup() {
const data = reactive({
config: {},
});
onMounted(async () => {
data.config = await fetch('/path/to/file.json');
});
return {
...toRefs(data),
};
},
template: `<div>{{ config }}</div>`
}
davy.ai
La diferencia entre la versión de la API de Opciones y la versión de la API de Composición radica en cómo se declara y actualiza los datos del componente.
En la versión de la API de Opciones, los datos se declaran en la función
data()
y se actualizan en el ciclo de vida del componenteasync mounted()
. Eltemplate
del componente muestra los datos cargados como se espera.En la versión de la API de Composición, se utiliza la función
setup()
en lugar de la funcióndata()
y los ganchos del ciclo de vida de la API de Opciones. La funciónreactive()
se utiliza para declarar el estado inicial del objetoconfig
como reactivo, y la funciónonMounted()
se utiliza para actualizar el objetoconfig
de forma asíncrona. Sin embargo, en eltemplate
, se muestra el estado inicial del objetoconfig
pero no los datos cargados.Para solucionar este problema, una solución es utilizar la función
toRefs()
para hacer que los datos reactivos sean accesibles en eltemplate
. Aquí, el objetodata
se declara como reactivo, y la funcióntoRefs()
se utiliza para devolver referencias a los datos reactivos. En eltemplate
, se accede al valor del objetoconfig
a través de la referencia devuelta por la funcióntoRefs()
.