学习Vue(3)列表渲染和数组更新检测

在游戏当中涉及到了列表,需要左右各两个列表展示用户的信息,界面如图:

首先在data里面定义两个数组列表

data() {
	return {
		...,
		leftUsers: [],
		rightUsers: []
	}
}

然后再onLoad()里面通过房间id获取当前房间的用户列表,并调用updateUser()跟新数据,这里使用假数据测试

var users = [{
	id: "123",
	imageUrl: ".../15895259872481860697124.png",
	sort: 2
	}, {
	id: "456",
	imageUrl: "...15895259872481860697124.png",
	sort: 8
	}];
this.updateUser(users);



updateUser(users) { //整理用户信息
	var leftMap = users.filter((user) => user.sort <= 6);
	var rightMap = users.filter((user) => user.sort > 6);
	for (var i = 0; i < 6; i++) {
		var isEmpty = true;
		for (var j = 0; j < leftMap.length; j++) {
			var user = leftMap[j];
			if (user.sort === i + 1) {
				this.leftUsers.splice(i, 1, user)
				// this.leftUsers[i] = user;
				isEmpty = false;
				break;
				}
		}
		if (isEmpty && !this.leftUsers[i]) {
			this.leftUsers.splice(i, 1, {
				id: i + 1,
				imageUrl: this.defaultImage,
				sort: 0
			});
		}
	}
	for (var i = 0; i < 6; i++) {
		var isEmpty = true;
		for (var j = 0; j < rightMap.length; j++) {
			var user = rightMap[j];
			if (user.sort === i + 7) {
				this.rightUsers.splice(i, 1, user)
				isEmpty = false;
				break;
				}
			}
			if (isEmpty && !this.rightUsers[i]) {
				this.rightUsers.splice(i, 1, {
					id: i + 1,
					imageUrl: this.defaultImage,
					sort: 0
				});
			}
	}
}

在更新用户列表的时候使用的是this.leftUsers[i] = user;,这样虽然改变了列表的数据,但是页面没有刷新,Vue提供了多种数组变更监听的方法,详细的内容可前往查看

经验分享 程序员 微信小程序 职场和发展