如何在退出时停止Vue.js 3 watch()API触发
我在显示产品信息的Vue组件中实现了一个如何在退出时停止Vue.js 3 watch()API触发,vue.js,vue-router,vuejs3,Vue.js,Vue Router,Vuejs3,我在显示产品信息的Vue组件中实现了一个watch。watch监视vue路由器的route对象,以更改ProductID参数。当它发生变化时,我想从后端API获取产品详细信息 要查看路线,我在Product.vue中执行此操作: import { useRoute } from 'vue-router' export default { setup() { const route = useRoute(); async function g
watch
。watch
监视vue路由器的route
对象,以更改ProductID
参数。当它发生变化时,我想从后端API获取产品详细信息
要查看路线
,我在Product.vue
中执行此操作:
import { useRoute } from 'vue-router'
export default {
setup() {
const route = useRoute();
async function getProduct(ProductID) {
await axios.get(`/api/product/${ProductID}`).then(..do something here)
}
// fetch the product information when params change
watch(() => route.params.ProductID, async (newID, oldID) => {
await getProduct(newId)
},
//watch options
{
deep: true,
immediate: true
}
)
},
}
上述代码有效,但如果用户离开Product.vue
,例如使用“后退”按钮返回主页,则会再次触发watch
,并尝试使用undefined
作为产品ID调用API(因为ProductID
param在主页route
上不存在)例如http://localhost:8080/api/product/undefined
。这会在应用程序中引发错误
当用户离开Product.vue
时,为什么会触发watch
如何正确地防止这种情况?我可以使用if(newID){await getProduct(newID)}
来实现,但这似乎与手表应该执行的操作背道而驰
watch
在vue内部但与组件无关的对象中注册观察者。我认为这是一个Map
。因此销毁组件对反应性系统没有影响
只需忽略newID
未定义的情况,就像您已经做过的那样。但是为了防止将代码包装在一个大的if
块中,只需在回调开始时使用if(newID==undefined)return;
即可。如果您的ID总是真实的(0
和“
都是无效ID)您甚至可以使用if(!newID)return;
在不使用监视选项的情况下进行尝试监视选项是必需的,否则页面上不会显示任何内容这是关于watch
不依赖某个组件的文档吗?希望了解更多关于它的工作原理以及它在Vue生命周期中的位置。