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

2024-04-28 14:31:35 浏览数 (1)

前言

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腾讯技术创作特训营最新征文,快来和我瓜分大奖!

0 人点赞