vue3组件刷新,手动刷新组件,手动重新加载组件,类似reload方法
电脑版发表于:2024/12/25 14:35
一般情况会封装一个refreshData来重新刷新数据,但是有些情况参数比较复杂,写这种刷新方法需要注意很多东西还要注意时机问题,所以可以在某些情况下直接去刷新组件来刷新数据。
如何是调用组件内部的方法这样调用就行了
const projectTeamMembersRef = ref(null)
const getTrainingSubProgramList = async (_trainingProgramId: any) => {
state.pageParam.trainingProgramId = _trainingProgramId
// 改变key刷新组件
// state.reloadKey = state.reloadKey + 1
// 调用组件内部的方法
if (projectTeamMembersRef && projectTeamMembersRef.value) {
projectTeamMembersRef.value.refreshData()
}
}
方法一:使用 key 强制重新渲染
通过改变组件的 key 属性,Vue 会认为这是一个全新的组件实例,从而强制重新渲染。
<template>
<ProjectTeamMembers
ref="projectTeamMembersRef"
v-if="state.pageParam.trainingProgramId"
:key="reloadKey"
:programType="1"
:programID="state.pageParam.trainingProgramId"
></ProjectTeamMembers>
<button @click="reloadComponent">Reload Component</button>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const state = ref({
pageParam: {
trainingProgramId: 123, // 示例数据
},
});
const projectTeamMembersRef = ref(null);
const reloadKey = ref(0); // 初始化 key
const reloadComponent = () => {
reloadKey.value += 1; // 改变 key 值以强制重新渲染组件
};
return {
state,
projectTeamMembersRef,
reloadKey,
reloadComponent,
};
},
};
</script>
在这个例子中,每次点击按钮时,reloadKey 的值都会增加,从而导致 ProjectTeamMembers 组件被重新渲染。