'How to re mounted component with composition api in vue 3

I want to do a dynamically video player with Artplayer when if changing a route or router pushed or something then application render a new video player with new changed link so I face a problem that's my old videoplayer component can't rewrite instance i use watchEffect methods to detect route change and try to updated component but it's doesn't work

<template>
  <div class="w-full h-full xl:w-9/12">
    <div class="w-full h-96 xl:h-2/3 flex p-6 items-center justify-center">
      <div
        ref="player"
        class="mx-auto w-full h-full"
        v-if="reloadLink.name == this.$route.params.link"
      ></div>
    </div>
  </div>
</template>
<script setup>
import {
  ref,
  reactive,
  onMounted,
  nextTick,
  defineExpose,
  watchEffect,
  onUpdated,
  unmounted,
} from "vue";
import Artplayer from "artplayer";
import { useRoute } from "vue-router";

const route = useRoute();

const options = reactive({
  url: "https://player.vimeo.com/progressive_redirect/playback/364504351/rendition/1080p?loc=external&signature=66193741eea8c35bb1e8ac0c19f96e6d9f825cb04b965e073c3b7573c421eb39",
  title: "One More Time One More Chance",
  poster: "ss",
  volume: 0.5,
  isLive: false,
  muted: false,
  autoplay: false,
  pip: true,
  autoSize: true,
  autoMini: true,
  // screenshot: true,
  setting: true,
  loop: true,
  // flip: true,
  playbackRate: true,
  aspectRatio: true,
  fullscreen: true,
  fullscreenWeb: true,
  // subtitleOffset: true,
  miniProgressBar: true,
  mutex: true,
  backdrop: true,
  theme: "#23ade5",
  lang: navigator.language.toLowerCase(),
  moreVideoAttr: {
    crossOrigin: "anonymous",
  },
  quality: [
    {
      html: "SD 480P",
      url: "https://player.vimeo.com/progressive_redirect/playback/364504351/rendition/1080p?loc=external&signature=66193741eea8c35bb1e8ac0c19f96e6d9f825cb04b965e073c3b7573c421eb39",
    },
    {
      default: true,
      html: "HD 720P",
      url: "https://player.vimeo.com/progressive_redirect/playback/364504351/rendition/1080p?loc=external&signature=66193741eea8c35bb1e8ac0c19f96e6d9f825cb04b965e073c3b7573c421eb39",
    },
  ],
});
const reloadLink = {
  name: "thee",
};
console.log(reloadLink);
// options.url = "https://player.vimeo.com/progressive_redirect/playback/364499803/rendition/1080p?loc=external&oauth2_token_id=1597805160&signature=8bbd350f0737458fbbeba983b73a4d403496eb3ca0df35cda7677ea5239cf7be";
const player = ref(null);
console.log(options.url);

onMounted(() => {
  nextTick(() => {
    new Artplayer({
      ...options,
      container: player.value,
    });
  });
});
watchEffect(() => {
  // reloadLink.value = route.params.link;
  options.url = route.params.link;
  // console.log(options.url);

  reloadLink.name = route.params.link;
  () => {
    options.url = route.params.link;
  };
});
onUpdated(() => {
  options.url = route.params.link;
  unmounted(() => {
     Artplayer;
   });
});

defineExpose({
  player,
  options,
});
</script>


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source