如何正确链接Vuex动作,并正确改变两次调用之间的状态?

马佐

我有一个Vuex店在我的应用程序定义gettersactionsmutations现在,一个动作从API请求数据,并将接收到的数据提交给操作状态的变异。此特定操作(名为initConfiguration)加载了一些元数据和配置,必须先将这些元数据和配置应用于存储,然后才能执行后续操作。在我的根组件中,mounted生命周期挂钩函数中有一些初始化代码,如下所示:

new Vue({
  el: '#app',
  store,
  render: h => h(App),
  mounted() {
    store.dispatch('initConfiguration').then(() => {
      store.dispatch('loadData')
    })
  }
})

我面临的问题是loadData在调用下一个动作之前状态尚未更改,因此由于缺少/未初始化的数据,该动作失败了。由于最终可能会调用多个动作,因此我想避免loadData从动作中直接分派initConfiguration动作(而且据我了解,必须避免通过突变调用动作)。

这是我的商店实施...

export default Vuex.Store({
  state: {
    metadata: {
      initialized: false,
      config: { }
    }
  },
  mutations: { 
    setConfiguration(state, config) {
      state.metadata.config = config
      state.metadata.initialized = true
    }
  },
  actions: {
    initConfiguration({commit}) {
      axios.get('configuration').then((response) => {
        commit('setConfiguration', response.data)
      })
    },
    loadData({commit, state}) {
      axios.get(state.metadata.config.tenantDataUrl) // crashes here due to undefined data
        .then((response) => { ... });
    }
  }
})

如何正确链接动作,并确保状态在两者之间得到更新?

特雷弗

您需要退还axios承诺。向每个axios调用添加返回值,您的现有代码将起作用。

您也可以这样重写

new Vue({
  el: '#app',
  store,
  render: h => h(App),
  async mounted() {
    await store.dispatch('initConfiguration')
    await store.dispatch('loadData')    
  }
})

export default Vuex.Store({
  state: {
    metadata: {
      initialized: false,
      config: { }
    }
  },
  mutations: { 
    setConfiguration(state, config) {
      state.metadata.config = config
      state.metadata.initialized = true
    }
  },
  actions: {
    async initConfiguration({commit}) {
      const response = await axios.get('configuration')
      commit('setConfiguration', response.data)
    },
    async loadData({commit, state}) {
      const response = await axios.get(state.metadata.config.tenantDataUrl) // crashes here due to undefined data
     // do whatever with response, or try/catch
    }
  }
})

如果您需要在每个步骤中更新vue模板,请添加此

new Vue({
  el: '#app',
  store,
  render: h => h(App),
  async mounted() {
    await store.dispatch('initConfiguration')
    await this.$nextTick() // cause vue to run getters and update computeds
    await store.dispatch('loadData')    
  }
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Vuex:如何正确调用动作?

来自分类Dev

是否存在在两次调用之间保留处理器状态的机制

来自分类Dev

onStart两次调用之间没有onStop?

来自分类Dev

两次调用之间未存储SharedPreferences

来自分类Dev

javascript:在两次调用之间保存变量的值?

来自分类Dev

Scrapy:在两次调用之间保存cookie

来自分类Dev

如何用相同的参数来验证相同的模拟方法的调用,该参数会在模拟中更改两次调用之间的状态?

来自分类Dev

如何在两次调用之间保持环境变量?

来自分类Dev

如何在JNI的两次调用之间保留对象?

来自分类Dev

托管库之间的两次调用之间本机库中静态变量的值

来自分类Dev

Redux - Angular:如何防止动作被调用两次?

来自分类Dev

您可以在两次绘制调用之间多次更改画布样式参数吗?

来自分类Dev

放弃两次连续调用之间的键盘事件(MATLAB)

来自分类Dev

Java是否在函数内支持静态变量以在两次调用之间保留值?

来自分类Dev

Bash函数变量在两次调用之间仍然存在

来自分类Dev

Java是否在函数内支持静态变量以在两次调用之间保留值?

来自分类Dev

您可以在两次绘制调用之间多次更改画布样式参数吗?

来自分类Dev

ArrayList在两次服务器调用之间为空

来自分类Dev

两次动作之间的时间

来自分类Dev

目标动作被调用两次

来自分类Dev

如何在两次测试之间重置Realm的状态?

来自分类Dev

检测两次调用的连接状态

来自分类Dev

C ++数值库:std :: uniform_int_distribution <>,更改两次调用之间的分配范围

来自分类Dev

我必须单击两次按钮以获取状态以在React中正确呈现

来自分类Dev

Vuex:如何在动作中正确添加调度的动作

来自分类Dev

如何防止在asp.net mvc中两次调用一个动作?

来自分类Dev

当使用scrollRectToVisible()时,它需要调用两次以正确定位位置。怎么修?

来自分类Dev

必须调用wx.Panel两次以设置正确的大小

来自分类Dev

我无法正确共享我的Observable流,并且http请求调用了两次

Related 相关文章

  1. 1

    Vuex:如何正确调用动作?

  2. 2

    是否存在在两次调用之间保留处理器状态的机制

  3. 3

    onStart两次调用之间没有onStop?

  4. 4

    两次调用之间未存储SharedPreferences

  5. 5

    javascript:在两次调用之间保存变量的值?

  6. 6

    Scrapy:在两次调用之间保存cookie

  7. 7

    如何用相同的参数来验证相同的模拟方法的调用,该参数会在模拟中更改两次调用之间的状态?

  8. 8

    如何在两次调用之间保持环境变量?

  9. 9

    如何在JNI的两次调用之间保留对象?

  10. 10

    托管库之间的两次调用之间本机库中静态变量的值

  11. 11

    Redux - Angular:如何防止动作被调用两次?

  12. 12

    您可以在两次绘制调用之间多次更改画布样式参数吗?

  13. 13

    放弃两次连续调用之间的键盘事件(MATLAB)

  14. 14

    Java是否在函数内支持静态变量以在两次调用之间保留值?

  15. 15

    Bash函数变量在两次调用之间仍然存在

  16. 16

    Java是否在函数内支持静态变量以在两次调用之间保留值?

  17. 17

    您可以在两次绘制调用之间多次更改画布样式参数吗?

  18. 18

    ArrayList在两次服务器调用之间为空

  19. 19

    两次动作之间的时间

  20. 20

    目标动作被调用两次

  21. 21

    如何在两次测试之间重置Realm的状态?

  22. 22

    检测两次调用的连接状态

  23. 23

    C ++数值库:std :: uniform_int_distribution <>,更改两次调用之间的分配范围

  24. 24

    我必须单击两次按钮以获取状态以在React中正确呈现

  25. 25

    Vuex:如何在动作中正确添加调度的动作

  26. 26

    如何防止在asp.net mvc中两次调用一个动作?

  27. 27

    当使用scrollRectToVisible()时,它需要调用两次以正确定位位置。怎么修?

  28. 28

    必须调用wx.Panel两次以设置正确的大小

  29. 29

    我无法正确共享我的Observable流,并且http请求调用了两次

热门标签

归档