如何等待从 Vuex 上传的数据?

Posted

技术标签:

【中文标题】如何等待从 Vuex 上传的数据?【英文标题】:How await uploaded data from Vuex? 【发布时间】:2017-12-05 06:42:25 【问题描述】:

我有 Vuex 存储,我存储“用户”(从服务器上传的 obj)

在创建部分的主 App.vue 中,我总是填写“用户”

这是异步方法。我的组件不等待。当我在模板 user.logo 中使用时,控制台 404 出现错误

http://example.net/images/undefined

但是在下一秒,当用户上传时,错误消失了。

如何让应用在 Vuex 中等待上传的异步日期?


已更新。我明白为什么会这样。组件已安装,异步数据未准备好。我在 Vuex 中使状态“准备就绪”,成功上传后变为真。我在计算部分检查“准备就绪”。如果没有准备好返回 no_logo.png

但是,在我的组件中,在创建部分中,当我通过 Vuex 商店中的“user.id”从服务器获取其他数据时(但用户尚未准备好),我遇到了错误。如何在获取之前在已创建部分中检查“就绪”?

//html
<div id='app'>

  <ul>
    <li v-for='role in roles'>
      <p>role</p>
    </li>
  </ul>


</div>

//script Vue
var app = new Vue(
  el: '#app',
  data: 
    roles: []
  ,

  created: 
    this.fetchingItems() //GOT ERROR need check Ready!!!
  ,

  methods: 
    fetchingItems() 
      axios.get('api/getRoles/$this.$store.user.id')
        .then((res) => this.roles = res.data.roles)
    
  
)


// This is store!!!.
const store = new Vuex.Store(
  state: 
    ready: false,
    user: 
  ,
  mutations: 
    USER_SET(state, user) 
        state.user = user
      ,
      READY_SET(state) 
        state.ready = true
      

  ,
  action: 
    loadUser() 

  axios.get('api/getUser/$parseInt(localStorage.getItem('user_id'))')
      commit('USER_SET', res.data.user)
      commit('READY_SET')

    
  
)

【问题讨论】:

您是否在ready() 方法中调度loadUser 操作? 准备好不是方法。它在 vuex 中的状态 ready () 在 vue2 中被贬低。 【参考方案1】:

我修好了!

使用手表。

watch: 
        ready: function () 
            this.fetchingItems()
        
    ,

【讨论】:

【参考方案2】:

会出现这种情况,因为组件挂载时用户信息不存在,但最终会存在。

在此图中,您正在调度和操作,向后端 API 请求数据,然后提交到存储。

在提交之前,组件中的所有内容都不会被实际数据填充。

您需要做的是使用v-if 来显示或不显示组件。

另一种方法是显示覆盖,直到所有数据都像这样加载:

【讨论】:

我明白为什么会这样。组件已安装,异步数据未准备好。我在 Vuex 中使状态“准备就绪”,成功上传后变为真。我在计算部分检查“准备就绪”。如果未准备好,则返回 no_logo.png 但是,在我的组件中,在创建部分中,当我通过 Vuex 商店中的“user.id”从服务器获取数据时(但用户尚未准备好),我遇到了错误。如何在获取之前在已创建部分中检查“准备就绪”?

以上是关于如何等待从 Vuex 上传的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的应用程序从“拒绝”状态移动到“等待上传”状态?

如何使用 vue/vuex 从输入中过滤数据?

我应该如何构建多用途 Vue 组件以从不同的 Vuex 路径加载数据?

Firestore、vue、vuex、vuexfire:如何让 getter 真正从存储中获取数据?

如何在 Vuex 模块中使用 RxJS

如何从其父组件下的组件打开和关闭 v-dialog?使用 Vuex?