es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>`
}
Tags:  , , ,

Answer

  1. Avatar for 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 componente async mounted(). El template 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ón data() y los ganchos del ciclo de vida de la API de Opciones. La función reactive() se utiliza para declarar el estado inicial del objeto config como reactivo, y la función onMounted() se utiliza para actualizar el objeto config de forma asíncrona. Sin embargo, en el template, se muestra el estado inicial del objeto config 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 el template. Aquí, el objeto data se declara como reactivo, y la función toRefs() se utiliza para devolver referencias a los datos reactivos. En el template, se accede al valor del objeto config a través de la referencia devuelta por la función toRefs().

Comments are closed.