[Boutique] El control principal de vue3 obtiene datos de forma remota, pero no se pueden mostrar en el componente secundario

Si el componente principal obtiene datos de forma remota en Vue 3, pero el componente secundario no puede mostrarlos, generalmente se debe a que el tiempo de entrega o representación de los datos es incorrecto, o que el componente secundario se representó antes de que los datos se cargaran por completo. Aquí hay posibles soluciones:

Asegúrese de que los datos se carguen antes de renderizar el componente secundario: si el componente principal obtiene datos a través de una solicitud asincrónica, asegúrese de que los datos se carguen antes de renderizar el componente secundario. Los datos se pueden pasar a los subcomponentes a través de accesorios después de que se resuelva la devolución de llamada o la Promesa de carga de datos.

Solución 1: utilizar v-ifpara controlar la representación de subcomponentes

En el componente principal, puede usar v-ifdirectivas para controlar la representación del componente secundario para garantizar que el componente secundario se represente después de cargar los datos.

<template>
  <div>
    <!-- 父组件中根据数据是否加载来控制子组件的渲染 -->
    <child-component v-if="dataLoaded" :data="loadedData" />
  </div>
</template>

<script setup>
import {
    
     ref, onMounted } from 'vue';

const dataLoaded = ref(false);
const loadedData = ref([]);

// 模拟异步数据加载
onMounted(() => {
    
    
  setTimeout(() => {
    
    
    loadedData.value = [/* 加载的数据 */];
    dataLoaded.value = true; // 数据加载完成
  }, 1000);
});
</script>

Método 2: usar异步组件

Vue 3 admite componentes asincrónicos, que pueden cargar y representar componentes secundarios cuando sea necesario. Esto ayuda a representar los componentes secundarios una vez que los datos están completamente cargados.

<template>
  <div>
    <!-- 使用异步组件来延迟渲染子组件 -->
    <async-component :data="loadedData" />
  </div>
</template>

<script setup>
import {
    
     ref, onMounted } from 'vue';

const loadedData = ref([]);

// 模拟异步数据加载
onMounted(() => {
    
    
  setTimeout(() => {
    
    
    loadedData.value = [/* 加载的数据 */];
  }, 1000);
});
</script>

<script>
import {
    
     defineAsyncComponent } from 'vue';

// 定义异步子组件
const AsyncComponent = defineAsyncComponent(() =>
  import('./AsyncComponent.vue')
);
</script>

Solución 3: activar la actualización de subcomponentes

Si la actualización de los subcomponentes no se puede activar automáticamente una vez completada la carga de datos, puede intentar utilizar $forceUpdateel método para activar manualmente la actualización de los subcomponentes.

<template>
  <div>
    <!-- 父组件中根据数据是否加载来控制子组件的渲染 -->
    <child-component :data="loadedData" />
  </div>
</template>

<script setup>
import {
    
     ref, onMounted } from 'vue';

const loadedData = ref([]);

// 模拟异步数据加载
onMounted(() => {
    
    
  setTimeout(() => {
    
    
    loadedData.value = [/* 加载的数据 */];
    // 手动触发子组件的更新
    $refs.childComponent.$forceUpdate();
  }, 1000);
});
</script>

Supongo que te gusta

Origin blog.csdn.net/lianghecai52171314/article/details/132487894
Recomendado
Clasificación