Chan Yoong Hon
Chan Yoong Hon

Reputation: 1812

[Vuejs ]Navigating to current location ("/...") is not allowed

In some situation, my logrocket always prompt me the the following error

Navigating to current location ("/error") is not allowed

However, when i check it in my web application. It works perfectly. I have no idea why logrocket always prompt this error in some of the user.

The following is my js code

 gotoErrPage () {
      this.$router.replace({
        name: 'Error',
        query: {
          showRefresh: true,
        },
      })
    },

Upvotes: 2

Views: 8399

Answers (1)

Chan Yoong Hon
Chan Yoong Hon

Reputation: 1812

Finally I understand why it happened. The error you see in the console is part of the new promise api: before, if no callbacks were supplied to router.push, errors were only sent to the global router error handler. Now, because both push and replace return a promise, if the navigation failure (anything that cancels a navigation like a next(false) or next('/other') also counts) is not caught, you will see an error in the console because that promise rejection is not caught. However, the failure was always there because trying to navigate to same location as the current one fails. It's now visible because of the promise being rejected but not caught.

I able to solve this issue with 2 solutions as following. The first solutions is using router-link.

<router-link
  to="/Error"
  v-slot="{ href, route, navigate, isActive, isExactActive }"
>

</router-link>

The second solutions is add catch in my function

   this.$router.replace({
        name: 'Error',
        query: {
          showRefresh: true,
        }).catch(err => {})

Upvotes: 3

Related Questions