VUE组件重新渲染-——通过改变key 使得vue重新渲染页面

场景是这样的有一个公共列表组件他是通过hook来实现的接口数据啥的,但是我在某个地方需要用到了某个列表去详情页展示,需要动态变换id来切换数据,但是公共的组件不能实现

<xxxx-table
		:columns="tableColumns"
		:data="tableData"
		:loading="tableLoading"
		:pagination="false"
		@page-change="pageChange"
		@page-size-change="pageSizeChange"
	/>
import commonTable from "@/hooks/commonTable";
const {
	getTableData,
	tableData,
	tableLoading,
	pageChange,
	pageSizeChange,
	handleSave,
	handleDel
} = commonTable(`/api/xxxx/table`);

代码是这样的通过写死路径来用hook实现表格的一系列常见操作
但是某些场景需要传递一个id来获取数据也就是

commonTable(`/api/xxxx/数据ID/table`);

这个组件这么写就没考虑这个动态的事情,但是又只有一个地方用到了 所以在想怎么让他支持根据id变化来动态支持数据刷新,第一时间想到的是改组件写watch 去监听id,但是这样就需要去改组件改接口不能再用hook了,所以我去搜罗了怎么能让组件重新渲染

直接面向🤖gpt编程
在这里插入图片描述在这里插入图片描述

🤖:【使用 key 强制重新渲染,通过更改组件的 key 属性来强制 Vue 重新渲染组件。当 key 变化时,Vue 会销毁并重新创建该组件实例】

其中我采取了变化key这一方案(简单迅速🤏) 因为我的组件仅限于展示数据而且只有一个所以我觉得key 问题不大;

<children :dataId=id :key=id/>

在这里插入图片描述
🤖:缺点 =>性能问题:

  • 每次更改 key 时,Vue 会销毁并重新创建整个组件实例。这可能会引发性能问题,尤其是在组件内部有复杂逻辑或大量子组件时。
    组件状态丢失:

  • 重新创建组件会导致组件的内部状态丢失。如果组件中有未保存的数据、表单输入或者其他临时状态,这些数据会在组件重新创建时丢失。
    副作用和生命周期钩子:

  • 重新创建组件会重新触发组件的生命周期钩子(如 created、mounted 等)。如果这些钩子中有副作用(如发起网络请求),会导致这些操作重复执行,可能会引发不必要的负载。

🤖还提供了一些别的解决方案 例如:

  • 使用 forceUpdate(不推荐)
    虽然 Vue 3 没有直接暴露 forceUpdate 方法,但你可以通过使用组件的实例来强制更新组件。这通常不推荐,除非你有非常特定的需求。
  • 使用 watchEffect/watch 重新获取数据
    如果你只需要重新获取数据而不是完全重新渲染组件,可以使用 watchEffect 或 watch 来监听 customerId 的变化,并重新获取数据。
  • 使用v-if
  • 重新加载整个页面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萝呗 .

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值