Vue.js 有副作用但无无限循环的watchEffect
我想做的是:Vue.js 有副作用但无无限循环的watchEffect,vue.js,vue-composition-api,Vue.js,Vue Composition Api,我想做的是: 基于道具构建URL 最初以及URL更改时,获取一些数据 由于这是异步的,并且我还希望指示加载,因此我使用以下构造: constpageurl=computed(()=>`/api/${props.foo}/${props.bar}`) 常数状态=无功({ 第页:空, 错误:null, 加载:错误 }) watchEffect(异步()=>{ state.loading=true 试一试{ const resp=wait axios.get(pageUrl.value) state.
constpageurl=computed(()=>`/api/${props.foo}/${props.bar}`)
常数状态=无功({
第页:空,
错误:null,
加载:错误
})
watchEffect(异步()=>{
state.loading=true
试一试{
const resp=wait axios.get(pageUrl.value)
state.page=resp.data
}捕捉(错误){
state.error=err
console.log(错误)
}
state.loading=false
})
//要使用的组件的返回页、加载、错误
问题在于,这似乎是在一个无限循环中运行的,因为在主体中,我不仅对pageUrl
作出反应,而且对state
作出反应,该状态本身在函数主体中被修改
或者,我可以使用watch(pageUrl,async pageUrl=>{…})
,但这似乎只有在pageUrl
更改时才会触发(在我的情况下:我修改URL,因为道具是通过vue路由器更新的,但不是在我最初访问URL时)
我应该在这里做什么,我的信号加载状态的想法在这里不合适吗
从逻辑的角度来看,页面
是一个计算值,我在这里使用监视
的唯一原因是它是异步的,并且可能会产生错误。多亏了Husam,我才意识到了这个错误,而且似乎两次改变一个状态会引入这种行为——在我的例子中,设置加载
为真
,然后再次设置为假
这种行为在Vue3中并不明显,解决方法(通常可能是更干净的方法)是直接使用watch
而不是watchEffect
显示函数的不同重载,并且Vue3 API中没有直接记录的options
参数。在那里,我发现我上面的调用需要读作watch(value,async value=>{effect},{immediate:true})
如果你将Vue 2与composition API插件一起使用,那么似乎有一个与此相关的错误。非常感谢你-这个错误中的示例非常适合我。是的,它是vue 2,因为我需要vuetify,我想它还没有为vue 3做好准备。