前言
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
指令下面是一个改进后的示例代码:
<!-- 步骤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腾讯技术创作特训营最新征文,快来和我瓜分大奖!