首页 > 其他分享 >uni-app使用watch监听数据,当数据变化时页面没有根据变化数据渲染解决方法

uni-app使用watch监听数据,当数据变化时页面没有根据变化数据渲染解决方法

时间:2024-11-14 11:48:23浏览次数:3  
标签:fenshuj ref const pageNo data app watch value 数据

uni-app使用<Fudian :fenshuj="fenshuj"></Fudian>父传子数据时,子组件通过

import { ref, onMounted, watch, watchEffect, defineProps } from "vue";
    const props = defineProps({
        fenshuj: {
            type: String,
            required: true
        }
    });

接收数据,想要实现子组件根据父组件传过来的内容实时更新,可以使用watch监听数据的改变,但是会发现监听到数据发生改变了但是页面并没有根据新改变的内容做一个重新渲染,可以使用watchEffect来触发组件的重新渲染

示例:带分页的表格

<template>
	<view>
		<th-table :column="column" :listData="data" :checkSort="checkSort" :st="st" :sr="sr" :tdClick="tdClick"
			height="0.5" :stripe="true" :border="true" :loading="false">
			<template v-slot:b="Props">
				<span style="color: red;">{{ Props.item.b }}</span>
			</template>
			<template v-slot:c="Props">
				<span style="color: green;" @click="log(Props.item)">{{ Props.item.c }}</span>
			</template>
			<template v-slot:a="Props">
				<div style="color: pink;">{{ Props.item.a }}</div>
				<div>{{ Props.item.e }}</div>
			</template>
		</th-table>
		<view class="pagination">
			<button @click="prevPage" :disabled="pageNo === 1">上一页</button>
			<view class="pagina_q">
				<view>
					页码 {{ pageNo }}/{{ totalPages }}
				</view>
			</view>
			<button @click="nextPage" :disabled="pageNo === totalPages">下一页</button>
		</view>
	</view>
</template>

<script setup lang="ts">
	import { ref, onMounted, watch, watchEffect, defineProps } from "vue";
	const props = defineProps({
		fenshuj: {
			type: String,
			required: true
		}
	});

	const fenshuj = ref({});
	const nair = ref();

	// 表头配置参数
	const column = ref([
		{
			title: '时间',
			isSort: false,
			isFixed: false,
			key: 'dataTime'
		},
		{
			title: '电费',
			isSort: true,
			isFixed: false,
			key: 'powerPrice'
		}
	]);
	// 表身数据
	const data = ref([]);

	// 排序字段
	const st = ref('b');
	// 排序 1降序 -1升序
	const sr = ref(-1);

	// 切换排序事件
	const checkSort = (name : string, type : number) => {
		st.value = name;
		sr.value = type;
	};
	// 模拟请求数据
	setTimeout(() => {
		data.value = nair.value;
	}, 500);

	// 分页相关
	const pageNo = ref(1);

	// 计算总页数
	const totalPages = ref();
	// 分页操作
	const nextPage = () => {
		if (pageNo.value < totalPages.value) {
			pageNo.value += 1;
			uni.$emit('pageNoChange', pageNo.value);
		}
	};
	const prevPage = () => {
		if (pageNo.value > 1) {
			pageNo.value -= 1;
			uni.$emit('pageNoChange', pageNo.value);
		}
	};

	onMounted(() => {
		uni.$emit('pageNoChange', pageNo.value);
	});

	// 监听 props.fenshuj 的变化
	watch(() => props.fenshuj, (newVal) => {
		fenshuj.value = newVal;
		// 检查 newVal 是否为 undefined
		if (newVal) {
			totalPages.value = newVal.pageTotal;
			if (fenshuj.value && fenshuj.value.data && fenshuj.value.data.tableData) {
				nair.value = fenshuj.value.data.tableData;
				data.value = nair.value; // 手动更新 data.value
			}
		} else {
			console.warn("fenshuj 的值为 undefined");
		}
	}, { immediate: true });

	// 使用 watchEffect 确保数据更新后能够正确触发组件的重新渲染
	watchEffect(() => {
		if (fenshuj.value && fenshuj.value.data && fenshuj.value.data.tableData) {
			nair.value = fenshuj.value.data.tableData;
			data.value = nair.value; // 手动更新 data.value
		}
		if (fenshuj.value && fenshuj.value.pageTotal) {
			totalPages.value = fenshuj.value.pageTotal;
		}
	});
</script>

标签:fenshuj,ref,const,pageNo,data,app,watch,value,数据
From: https://blog.csdn.net/Wx001214/article/details/143763568

相关文章

  • 2024年11月中国数据库排行榜:OB连续四月居榜首,腾讯云TDSQL升第九
    11月墨天轮社区的中国数据库流行度排行榜已更新,本期共有226个数据库产品参与,相较于年初的292个数据库,产品阵容已进行了更新和优化。近期,多个数据库产品取得了重要成果:OceanBase年度发布会发布了多项创新技术,广受关注;PolarDB的“云原生三层解耦Serverless数据库关键技术与应用”......
  • 数据库字段设置非空, phalcon创建数据验证不通过
    在使用phalcon的insert和update功能时,因为数据库所有的字段设置的都是NOTNULL,而phalcon的model在插入或更新之前会自动判断字段是否需要必填,因此导致有空字段时无法存入。开始遇到这问题时,想到两种解决方法:一、改数据库字段,把NOTNULL改为可以为空。但该数据库还得去找DBA......
  • 后端说传的data类型的数据前端如何传
    当后端API期望接收的数据类型是data类型时,通常指的是原始数据或者未加工的数据。在前端,你可以通过以下几种方式来传递这种类型的数据:1.使用FormData对象上传文件或数据如果你需要上传文件或者需要以multipart/form-data格式发送数据,可以使用FormData对象。这对于上传文件特别有......
  • 成本减半 + 效率翻倍:这家企业用 11 天实现数据处理飞跃
    伴随着云计算和数字化浪潮的推进,越来越多行业数据实时性的权重正在被加速提升,对企业而言,如果想要保证业务的持续发展,其底层数据库必须要能满足数据的实时性和高并发要求。除此之外,在降本增效的大潮下,“高性价比”也成为企业选择一款数仓的重要因素。那么,企业应该如何构建自己的......
  • 汽车行业数字化痛点凸显,“数据飞轮”提供企业破局新思路
    中国车企数字化转型始于“工业4.0”,在过去5年间,从少数传统品牌的蹒跚起步,到新势力品牌集体迈进,再到目前车企的全面启动,数字化变革热度高涨不减。随着科技的快速发展和消费者需求的不断变化,汽车行业在数字化转型过程中面临着多方面的挑战。企业在转型战略方面,顶层设计的缺乏导......
  • [OLAP/MPP/数据库] Clickhouse 性能优化篇
    性能分析system.query_log表简介此表包含已执行查询的相关信息,例如:开始时间、处理持续时间、错误消息。您可以更改query_log的设置,在服务器配置的query_log部分。您可以通过设置log_queries=0来禁用query_log.我们不建议关闭此日志,因为此表中的信息对于解决问题很......
  • 同城圈子APP隐私设置指南,社交圈子源码,前端uniapp,后端PHP
    圈子系统APP-uniapp源码开源社交圈子小程序社区系统兴趣爱好同城社交社群系统同城圈子APP隐私设置因应用而异,以下为通用步骤:1、进入隐私设置打开APP,点击底部导航栏的“我的”。进入“设置”页面,选择“隐私设置”。2、隐藏位置信息在隐私设置中,找到并点击“隐藏位置”选......
  • 如何分发APP供用户使用?
    ​在移动互联网时代,APP(应用程序)已成为人们日常生活中不可或缺的一部分。无论是购物、社交、娱乐还是工作,APP都提供了极大的便利。然而,开发一款APP只是第一步,如何将其有效地分发到用户手中,让用户能够轻松下载并使用,才是决定APP成功与否的关键。一、应用商店分发应用商店是APP分发......
  • 矩阵系统源码搭建的数据获取技术解析,开源部署,oem
    一、引言在矩阵系统的开发中,数据获取是至关重要的环节。无论是用于分析用户行为、优化业务流程,还是实现精准营销等目的,高效且准确的数据获取技术都是构建强大矩阵系统的基础。本文将深入解析矩阵系统源码搭建过程中涉及的数据获取技术,包括数据来源、获取方式以及相关的技术要......
  • vue2的uniapp添加用户登录校验
    在uni-app中实现全局路由守卫的确切方法可能会根据框架的版本和具体的实现方式有所不同。在Vue2和uni-app的结合使用中,全局路由守卫并不是原生支持的功能,因此我们需要采用一些替代方案。对于Vue2和uni-app,你可以通过封装uni-app的页面跳转方法来实现类似全局......