TeachingNote

vue3组件刷新,手动刷新组件,手动重新加载组件,类似reload方法

电脑版发表于:2024/12/25 14:35

一般情况会封装一个refreshData来重新刷新数据,但是有些情况参数比较复杂,写这种刷新方法需要注意很多东西还要注意时机问题,所以可以在某些情况下直接去刷新组件来刷新数据。

如何是调用组件内部的方法这样调用就行了

  1. const projectTeamMembersRef = ref(null)
  2. const getTrainingSubProgramList = async (_trainingProgramId: any) => {
  3. state.pageParam.trainingProgramId = _trainingProgramId
  4. // 改变key刷新组件
  5. // state.reloadKey = state.reloadKey + 1
  6. // 调用组件内部的方法
  7. if (projectTeamMembersRef && projectTeamMembersRef.value) {
  8. projectTeamMembersRef.value.refreshData()
  9. }
  10. }

方法一:使用 key 强制重新渲染

通过改变组件的 key 属性,Vue 会认为这是一个全新的组件实例,从而强制重新渲染。

  1. <template>
  2. <ProjectTeamMembers
  3. ref="projectTeamMembersRef"
  4. v-if="state.pageParam.trainingProgramId"
  5. :key="reloadKey"
  6. :programType="1"
  7. :programID="state.pageParam.trainingProgramId"
  8. ></ProjectTeamMembers>
  9. <button @click="reloadComponent">Reload Component</button>
  10. </template>
  11. <script>
  12. import { ref } from 'vue';
  13. export default {
  14. setup() {
  15. const state = ref({
  16. pageParam: {
  17. trainingProgramId: 123, // 示例数据
  18. },
  19. });
  20. const projectTeamMembersRef = ref(null);
  21. const reloadKey = ref(0); // 初始化 key
  22. const reloadComponent = () => {
  23. reloadKey.value += 1; // 改变 key 值以强制重新渲染组件
  24. };
  25. return {
  26. state,
  27. projectTeamMembersRef,
  28. reloadKey,
  29. reloadComponent,
  30. };
  31. },
  32. };
  33. </script>

在这个例子中,每次点击按钮时,reloadKey 的值都会增加,从而导致 ProjectTeamMembers 组件被重新渲染。

关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
猜你喜欢
      /