怎么在VUE生命周期挂钩和VUEX中使用异步/等待?

原学程将引见若何在VUE性命周期接洽以及VUEX中应用异步/期待?的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

怎么在VUE生命周期挂钩和VUEX中使用异步/等待? 教程 第1张

成绩描写

当我在mount()性命周期接洽中的App.vue组件平分派操纵时,它在减载其余组件以后运转。我在我的操纵中应用了异步/期待并装载了性命周期接洽。

App.vue文件

methods: {
...mapActions({
setUsers: "setUsers",
}),
},
async mounted() {
  try {
await this.setUsers();
  } catch (error) {
if (error) {
 console.log(error);
}
  }
 },

action.js文件:

async setUsers(context) {
  try {
const response = await axios.get('/get-users');
 
console.log('setting users');
 
if (response.data.success) {
 context.co妹妹it('setUsers', {
  data: response.data.data,
 });
}
  } catch (error) {
if (error) {
 throw error;
}
  }
 },

在用户列表组件中,我须要从Vuex夺取用户。是以,我正在应用mapGetters夺取用户列表。

...mapGetters({
getUsers: "getUsers",
  }),
 mounted() {
console.log(this.getUsers);
 },

但是成绩是"树立用户在掌握台登录this.getUsers后运转。

在用户列表组件中,我不妨在模板中应用getUser,但是当我测验考试经由过程掌握台登录this.getUser时,它出有供给所有信息。

怎样在运转所有其余组件之前运转app.vue文件?

推举谜底

您在组件中准确应用了异步期待。主要的是要懂得,async await没有会延早组件的履行,而且您的组件依然会出现并阅历分歧的性命周期接洽,比方mounted

async await所做的是推延以后高低文的履行,假如您在函数外部应用它,await以后的代码将在Promise剖析后产生,在您的情形下,您在created性命周期接洽中应用它,这意味着mounted性命周期接洽内的代码将在期待以后剖析。

是以,您要做的是保证仅在支到数据时出现组件。

操纵办法以下:

    假如组件是女组件的子组件,不妨应用v-if,而后当数据到去时,将data树立为True,以下所示:

数据-lang="js"数据-隐蔽="假"数据-掌握台="真"数据-巴贝我="假">

data() {
  return {
hasData: false,
  }
}

async mounted() {
 const users = await fetchUsers()
 this.hasData = true;
}
<SomeComponent v-if="hasData" />

    假如组件没有是女组件的子组件,则不妨应用watcher告诉您组件什么时候出现。应用watch时不妨当心,由于每一次产生变动时都邑产生变动。

1个简略的经历轨则是将Watch与没有常常变动的变质一路应用,假如您取得的数据年夜可能是只读的,您不妨应用这些数据,假如没有是,您不妨向Vuex添减属性,如loadingUsers

这里有1个怎样做到这1面的示例:

数据-lang="js"数据-隐蔽="假"数据-掌握台="真"数据-巴贝我="假">

  data: {
 return {
  hasData: false,
 }
  },
  computed: {
isLoading() {
 return this.$store.state.app.users;
}
  },
  watch: {
 isLoading(isLoading) {
if (!isLoading) {
  this.hasData = true;
}
 }
  }
<SomeComponent v-if="hasData" />

佳了闭于怎样在VUE性命周期接洽以及VUEX中应用异步/期待?的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。