使用新查询推送相同路由时再次创建挂钩而不是 运行

Created hook not running again when pushing the same route with a new query

我有一个组件创建了这样的钩子:

created() {
    if (this.$route.query.q) {
        //fetchdata
    }
}

然而,在同一个组件中,我尝试执行 $router.push(`?q=${search}`) 和 URL 更改,但创建的挂钩不会重新运行。

如果您重新路由到该组件,Vue 将重用该组件,因此 created 不会再次 运行。您可以使用 <router-view>:

上的键强制它这样做
<router-view :key="$route.fullPath" />

或使用 beforeRouteUpdate 挂钩:

beforeRouteUpdate(to, from, next) {
  if (this.$route.query.q) {
    //fetchdata
  }
  next();
}

首次创建组件时,此挂钩不会 运行,因此对于此解决方案,您可能需要同时使用 createdbeforeRouteUpdate

一些差异:

使用关键解决方案,组件将不会被缓存,因此它将在每个路由上重新创建(这就是导致每次 created 到 运行 的原因)。如果您只需要在创建时执行一次操作,例如无论查询如何,只调用一次 api,您可能不希望这样做。或者在极少数情况下,重新创建可能会对性能产生影响(可能不会)。

对于 beforeRouteUpdate,您可能必须在 2 个生命周期挂钩中使用相同的逻辑,但这并不是真正的问题。您也可以从此挂钩重新路由,这可能很有用。

使用你喜欢的/更有意义的,只要你理解其中的区别。