前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue3快速入门——表格数据渲染延迟问题

Vue3快速入门——表格数据渲染延迟问题

原创
作者头像
小明爱吃火锅
发布2024-04-28 14:31:35
1120
发布2024-04-28 14:31:35
举报
文章被收录于专栏:小明说Java小明说Java

前言

Vue3作为Vue.js的最新版本,带来了许多新特性和性能改进。然而,在实际开发中,我们可能会遇到一些看似不起眼的问题,比如表格数据渲染延迟,想必第一次使用VUE的同学应该会遇到吧。本文将通过一个案例,详细讲解如何在Vue3中解决这个问题。

案例

假设我们有一个简单的表格,用于展示商品分类信息。每个商品分类都有一个的分类、状态、时间和标题。我们的目标是使用Vue3将商品分类数据动态渲染到表格中。

问题描述

当我们首次加载页面时,表格中的数据并没有立即渲染出来,而是显示为原始的{{ item.category }}插值表达式。刚刚打开页面的时候,不能立即渲染数据,需要等待一会,数据才会逐渐渲染出来。这显然不是我们希望看到的用户体验。

表格渲染代码使用的是插值表达式,如下代码:

代码语言:html
复制
    <table border="1 solid" colspa="0" cellspacing="0">
        <tr>
            <th>分类</th>
            <th>时间</th>
            <th>状态</th>
            <th>标题</th>
        </tr>
        <tr v-for="(item, index) in articleList" :key="index">
            <td>{{ item.category }}</td>
            <td>{{ item.time }}</td>
            <td>{{ item.state }}</td>
            <td>{{ item.title }}</td>
        </tr>
    </table>

问题分析

这个问题通常是由于数据请求和处理有一定的延迟,而Vue的渲染机制是异步的。当数据还未准备好时,Vue会先渲染模板,然后再用实际的数据替换掉插值表达式。在这个过程中,用户就会看到原始的插值表达式。如下图:

解决方案

为了解决这个问题,可以使用v-text指令,是使用v-text指令来绑定文本内容。您可以将表格中的数据绑定更改为使用v-text指令下面是一个改进后的示例代码:

代码语言:js
复制
<!-- 步骤1 定义vue关联模块-->
<div id="app">
<!--   搜索框-->
    <input type="text" v-model="searchText">
    <button v-on:click="search">搜索</button>
    <span>{{searchText}}</span>
    <table border="1 solid" colspa="0" cellspacing="0">
        <tr>
            <th>分类</th>
            <th>时间</th>
            <th>状态</th>
            <th>标题</th>
        </tr>
        <tr v-for="(item, index) in articleList" :key="index">
        <td v-text="item.category"></td>
            <td v-text="item.time"></td>
            <td v-text="item.state"></td>
            <td v-text="item.title"></td>
        </tr>
    </table>
</div>

<script type="module">
    // 步骤2 引入vue模块 在线CDN的引入方式,从vue.esm-browser.js获取到createApp
    import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
    // 步骤3 创建Vue实例,挂载到app div上
    createApp({
        // 步骤4 定义数据这些数据会跟上面绑定的div关联
        data() {
            return {
                articleList: [
                    {
                        category: "时事",
                        time: "2023-09-5",
                        state: "已发布",
                        title: "中国男篮缘何一败涂地?",
                    },
                    {
                        category: "篮球",
                        time: "2023-09-5",
                        state: "草稿",
                        title: "华山景区已受大风影响阵风达7-8级,未来24小时将持续",
                    },
                    {
                        category: "旅游",
                        time: "2023-09-5",
                        state: "已发布",
                        title: "华山景区已受大风影响阵风达7-8级,未来24小时将持续",
                    },
                ],
                searchText: ''
            }
        },
        methods: {
            search: function () {
                this.searchText = searchText;
            },
        },
    }).mount('#app')
</script>
   

在这个示例中,使用的v-text数据双向绑定,没数据的时候表格就为空。除此之外,其实在Vue中,还可以使用v-bind指令来绑定数据。

总结

本文通过使用Vue3的v-text指令和响应式变量,将数据与标签属性绑定,渲染未完成不加载数据,这样就不会看到奇怪的插值表达式,可以有效地解决表格数据渲染延迟的问题。这种方法不仅提高了用户体验,还使我们的代码更加清晰和易于维护。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 案例
    • 问题描述
      • 问题分析
        • 解决方案
        • 总结
        相关产品与服务
        内容分发网络 CDN
        内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档