Skip to the content.

How to Force Vue to Rerender a Component

Sometimes, Vue’s reactivity system may fall short, and you might need to re-render a component. The Key-Changing Technique is a powerful solution to force Vue to reload a component. However, this article explores a few alternative methods that work for both Vue 2 and Vue 3:

The Horrible Way: Reloading the Entire Page

Reloading the entire page is an impractical solution and akin to restarting your computer for every app closure. Avoid this approach.

The Terrible Way: Using the v-if Hack

A slightly better solution involves clever use of the v-if directive. This technique involves toggling the v-if condition to force the component to re-render. While it works, it is considered a hack.

The Better Way: Using Vue’s Built-in forceUpdate Method

Vue provides a forceUpdate method, allowing you to force an update even if dependencies haven’t changed. While effective, this method circumvents Vue’s reactivity system, making it less recommended.

The Best Way: Using the Key-Changing Technique

The Key-Changing Technique is regarded as the best way to force Vue to refresh a component. By adding a :key attribute to the component and changing its value when a re-render is needed, Vue understands that it should replace the old component with a new one.

Implementation in Script Setup (Vue 3)

<template>
  <MyComponent :key="componentKey" />
</template>

<script setup>
import { ref } from "vue";
const componentKey = ref(0);

const forceRerender = () => {
  componentKey.value += 1;
};
</script>

Implementation in Options API (Vue 2 or Composition API)

<template>
  <MyComponent :key="componentKey" />
</template>

<script>
export default {
  data() {
    return {
      componentKey: 0,
    };
  },
  methods: {
    forceRerender() {
      this.componentKey += 1;
    },
  },
};
</script>

By changing the key, Vue destroys the old component and creates a new one, providing a clean and elegant solution to force component refresh.

Why Use a Key in Vue?

The key attribute helps Vue keep track of changes in a list of components, especially when components have their own state, initialization logic, or non-reactive DOM manipulation. Using a unique identifier as the key ensures that Vue can efficiently update, add, or remove components based on changes in the underlying data.

Remember, if you find yourself needing to force a re-render, consider alternative solutions, and if a re-render is necessary, opt for the Key-Changing Technique.

Ref: Michael Thiessen - Force Re-Render