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.

我想做的是:

  • 基于道具构建URL
  • 最初以及URL更改时,获取一些数据
  • 由于这是异步的,并且我还希望指示加载,因此我使用以下构造:

    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做好准备。