vue3 异步组件引用及使用

1 app.vue

<template>

  <div style="display:flex;">

    <Suspense>

   <!-- 默认插槽方式引用-->

      <template #default>

        <A></A>

      </template>

      <!-- fallback 组件没显示前先显示loading... -->

      <template #fallback>

        <div>

          loading...

        </div>

      </template>

    </Suspense>

  </div>

</template>

 //同步组件引用方式

  //import A from './components/zj.vue'

//异步组件引用方式--需要配合Suspense使用

const A = defineAsyncComponent(()=>import('./components/zj.vue'))

2 组件zj.vue

<template>

  <div>

      <div :key="item" v-for="item in list">

        {{ item.name }}

      </div>

    </div>

</template>

<script setup lang='ts'>

import{ref,reactive} from 'vue'

import {axios} from '../lib/server'

const list = await axios('/public/data.json')

setTimeout(() => {

  console.log(list,'+++++++++++')

}, 2000);

</script>

3 server.ts

type NameList = {

  name:string

}

export const axios =(url:string):Promise<NameList>=>{

  return new Promise((resolve)=>{

    let xhr:XMLHttpRequest = new XMLHttpRequest()

    xhr.open('GET',url);

    xhr.onreadystatechange=()=>{

      if(xhr.readyState ===4 && xhr.status == 200){

        resolve(JSON.parse(xhr.responseText))

      }

    }

    xhr.send(null);

  })

}

4 data.json

[

  {

   

    "id":1, "name":"张三"

  },

  {

    "id":2,"name":"李四"

  },

  {

    "id":3,"name":"王五"

  },

  {

    "id":4,"name":"赵柳"

  }

]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值