关于uni-app 使用vue3语法异步初始化数据

img

img


小程序展示空白,onload异步加载数组,数据刷新 但页面没有刷新

img


你在26和27行之间打印日志看看你返回的是什么

  • 这篇博客: Vue的自定义@change事件(自己学习用途,不建议参考)中的 onload 和 onunload 事件 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 当用户进入或离开页面时,会触发 onload 和 onunload 事件。

    onload 事件可用于检查访客的浏览器类型和版本,以便基于这些信息来加载不同版本的网页。

    onload 和 onunload 事件可用于处理 cookies。

    <body onload="checkCookies()">

在 return 前面使用 console.log 打印一下 list,看看有没有赋值成功,另外也可以不需要异步初始化数据,直接去掉 await,async 看看能不能显示出来。

不能直接修改reactive的值,你的swiperList使用reactive定义, swiperList就是一个响应式代理,直接修改swiperList就变成了常量,是无法追踪数据的,将reactive换成ref,赋值的时候使用swiperList.value

写的没问题,但是你直接赋值覆盖了那个代理了
将reactive换成ref,赋值的时候使用swiperList.value

uni-app中使用vue3语法详解
小白可以跟着做,写的非常详细,可以看看


最新的uniapp vue3的语法_胡亚涛的博客-CSDN博客 Vue 3 是 Vue.js 的最新版本,它基于 TypeScript 构建,提供了一些新的特性和改进,使得开发更加高效。 https://blog.csdn.net/m0_59029708/article/details/129409797

如果你的请求接口没有问题,在console.log(res)那里可以正常打印出正确的数据的话,那么应该就是你后面的赋值的问题,以及界面展示方面的问题了。


import { defineAsyncComponent } from 'vue-cli-service'  
  
const AsyncComponent = defineAsyncComponent(() => import('./components/AsyncComponent.vue'))  
  
export default {  
  components: {  
    AsyncComponent  
  },  
  // ...  
}

import Vue from 'vue'  
import Vuex from 'vuex'  
  
Vue.use(Vuex)  
  
export default new Vuex.Store({  
  state: {  
    data: []  
  },  
  getters: {  
    getData: state => state.data  
  }  
})


import { ref } from 'vue'  
import { mapGetters } from 'vuex'  
  
export default {  
  setup() {  
    const data = ref(null)  
    const getData = mapGetters(['getData'])  
  
    created() {  
      axios.get('/api/data').then(response => {  
        data.value = response.data  
      })  
    }  
  
    return {  
      data,  
      getData  
    }  
  }  
}

用控制台打印一下数据,看正常不

当使用Vue 3语法初始化数据时,您可以使用setup函数来异步初始化数据。下面是一个示例,展示了在Uni-app中使用Vue 3语法进行异步数据初始化的例子:

<template>
  <div>
    <h1>{{ message }}</h1>
    <ul>
      <li v-for="item in list" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

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

export default {
  setup() {
    // 使用ref创建响应式数据
    const message = ref('');
    const list = ref([]);

    // 使用onMounted钩子在组件挂载后执行异步操作
    onMounted(async () => {
      // 模拟异步获取数据
      const response = await fetchData();
      message.value = response.message;
      list.value = response.list;
    });

    // 模拟异步获取数据的函数
    async function fetchData() {
      // 发起异步请求获取数据
      const response = await fetch('https://api.example.com/data');
      const data = await response.json();
      return data;
    }

    // 返回需要暴露给模板的数据
    return {
      message,
      list
    };
  }
};
</script>

在上述代码中,我们使用了Vue 3的ref函数来创建响应式数据messagelist。然后,在onMounted钩子函数中,我们使用async/await语法执行异步操作,例如模拟通过API获取数据。在数据获取完成后,我们更新messagelist的值,由于它们是响应式的,页面将自动更新以反映新的值。

请注意,setup函数是Vue 3的新特性,用于替代Vue 2中的datacomputedmethods等选项。通过setup函数,我们可以更灵活地编写组件逻辑,并使用Vue 3的新特性。

你可以看看上面的例子,你的代码可以直接贴出来吗?

具体的原因我还没看到,
我第一眼看到的就是 async 这个语法去掉试试,
另外将你的数据改为静态数据,先保证数据可以正常显示,排除接口问题
还不行的话我远程看看