vue项目中体验优化小技巧

一:避免请求数据前出现空状态闪现问题

在项目中,经常会遇到这样的场景,比如有一个购物车页面。当购物车无数据时,会有一个空的状态,而当我们请求数据之前,因为原本购物车的数据的初始值为空数组,会导致这个空状态先闪现出来,然后再加载出来。体验非常不好。而导致这样的原因的结构一般是这样的:

<tempalte>
    <div>
        <div v-if="list.length>0">
            <div v-for="item in shopcartList" :key="item.id" >
                {{item.prodName}}
            </div>
        </div>
        <div class="empty" v-else>暂无数据</div>
    </div>

</template>
<script>
    data(){
        return{
            list:[]
        }
    },
    methods:{
        getList(){
            fetch(...).then(res=>{
                this.list=res.data.list
            }).catch(err=>throw new Error(err))    
        }

    }
</script>

空状态的展示完全依赖list这个数组是否有值,而默认是空,所以导致初始化的时候也展示出来。闪了一下。而我们仔细想想empty空状态展示的真正逻辑,它应该是请求了数据而且数据为空的时候才展示。所以我们需要再有一个标识,让它感知是真正请求了接口并且数据是空,而不是我们初始化默认给他赋值的[]。所以我们再加一个标识,让它去完成这个判断。

<template>
    <div>
        <h2>home</h2>
        <div class="item-wrap" v-if="list.length > 0">
            <p v-for="item in list" :key="item.id">{{item.name}}</p>
        </div>
        <div class="empty" v-if="list.length===0 && emptyFlag==1">暂无数据</div>
    </div>

</template>

<script  setup>
import request from "../utils/axios"
import { reactive,ref } from "vue"

const list=ref([])
let emptyFlag=ref(0)

const getList=()=>{
    emptyFlag.value=0;
    request("/api/list","GET").then(res=>{
            emptyFlag.value=1
            list.value=res.data.list||[]
    }).catch(err=>{
        throw new Error(err)
    })
}
getList()
</script>

<style  scoped>
.item-wrap{
    width: 600px;
    margin: 20px auto;
}
.item-wrap p{
    padding: 20px 0 ;
    box-shadow:  0 0 3px #ccc;
}
</style>

emptyFlag再我们每次请求这个接口的时候都会去做一个赋值,让它参与这个接口请求的过程。v-if="list.length===0 && emptyFlag==1" 让它只有在请求数据以后而且数据为【】的情况下才出现

二:避免请求数据前出现页面出现{{item.name}}

当请求获取数据时,如果接口比较缓慢,会出现页面展示{{item.name}}这样的情况,我们可以通过v-cloak指令+[v-cloak]:{display:none}来实现:

<template>
<div>
     <p v-cloak>姓名:{{info.name}}</p>
     <p v-cloak>年龄:{{info.age}}</p>
     <p v-cloak>email:{{info.email}}</p>
</div>
</template>

<style>

[v-cloak]{
    display: none;
}

</style>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值