vue3,在onMounted中请求得到的数据如何return出去

ts项目,代码如下,请问如何把playlist return出去,然后在html中像这样playlist.playCount 引用

 onMounted(async () => {
const playlist = await window.musicApi.getListDetails(listId);
       
    });
    return {
      playlist ,
    };
  },

数据格式如下

playlist = {
        id: 2846054862,
        name: '用音乐保持你每天的嘴角上扬',
        coverImgId: 109951164152314270,
        coverImgUrl: 'https://p1.music.126.net/hLv4YJOiLTE16LlRpdxZgQ==/109951164152314267.jpg',
        coverImgId_str: '109951164152314267',
        adType: 0,
        userId: 389547363,
        createTime: 1560683477373,
        status: 0,
        opRecommend: false,
        highQuality: false,
        newImported: false,
        updateTime: 1669191426061,
        trackCount: 116,
        specialType: 0,
        privacy: 0,
        trackUpdateTime: 1669191446302,
        commentThreadId: 'A_PL_0_2846054862',
        playCount: 41429588,
        trackNumberUpdateTime: 1669191426061,
        subscribedCount: 371223,
        cloudTrackCount: 0,
        ordered: true,
        description:
          '我已经准备好了好听又欢快的歌曲\n那你准备好今天的嘴角上扬了吗\n\n快来吧 让好听歌曲伴随你一整天的微笑\n(持更...)',
        tags: ['华语', '流行', '散步'],
        updateFrequency: null,
        backgroundCoverId: 0,
        backgroundCoverUrl: null,
        titleImage: 0,
        titleImageUrl: null,
        englishTitle: null,
        officialPlaylistType: null,
        copied: false,
      };

你不能改变onMounted的含义,他是在dom挂载完后执行了,是注册的一个回调,所以没法捕捉它的返回值,但是你可以发起网络请求后将数据暴露出去,可以参考下面的代码

        setup() {
            let store = useStore()
            let route = useRoute()

            let detailData = reactive({
                list: []
            })

            let id = computed(() => route.query.id)
            const title = computed(() => store.state.detailTitle)

            const incommentList = computed(() => store.state.commentList)

            onMounted(async () => {
                let data = await service.get(configapi.comments(id.value), {
                    start: 0,
                    count: 20
                })

                detailData.list = incommentList.value.reverse().concat(data.reviews || [])
                // console.log('detailData.list')
            })

            
            return {
                title,
                detailData

            }
        }
  • 给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Vue3 子组件onmounted 里面取不到props的值
  • 除此之外, 这篇博客: Vue3.x中的生命周期和钩子函数(部分)中的 onMounted() 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •   组件挂在到页面之后执行。

    <script lang="ts">
    // 引入onMounted 钩子
    import { ref, reactive, toRefs, onMounted } from "vue";
    
    export default {
      name: "App",
      setup() {
        console.log("1...setup()开始创建组件");
    
        const data = reactive({
          arr: ["Yes", "NO"],
          selectOne: "",
          selectOneFun: (index: number) => {
            data.selectOne = data.arr[index];
          },
        });
    	//调用onMounted 
    	onMounted(() => {
          console.log("3...onMounted()组件挂在到页面之后执行");
        });
    
        const refData = toRefs(data);
        return {
          ...refData,
        };
      },
    };
    </script>
    

就是要把你赋值的变量return出去


setup(){
  const postData = ref([])
    onBeforeMount(async () => {
      const res = await axios.get('http://localhost:3002/postdata')
      postData.value = res.data
    })
    return {
       ...
      postData
    }  
}