vuex状态有时是空的(未定义),特别是当我刷新页面时,有时它会起作用

问题描述 投票:0回答:1

vuex状态有时为空(未定义),特别是当我刷新页面时,有时它可以工作动作:

 getSkills(context) {
    let url = "/skills";
    const headers = {
      "x-api-key": process.env.VUE_APP_SIRH_X_API_KEY,
      Authorization: localStorage.getItem("access_token"),
    };
    return axios({
      method: "get",
      url: url,
      headers: headers,
    })
      .then((response) => {
        context.commit("getSkill", response.data.data.skills);
      })
      .catch((e) => {
        console.log(e);
      });
  },

getter:

      Skills: (state) => state.Skills,

mutation:

      getSkill(state, skills) {
    state.Skills = skills;
  },

状态:

     Skills: [],

vue

     computed: {
    ...mapState({}),
    ...mapGetters(["Candidate", "Skills"])
  },

    mounted() {
    this.getSkills();
    this.id = this.$route.params.id;
    this.Skills.forEach(element => this.skill_list.push(element.skill_name));
  },
     methods:{ ...mapActions(["attachSkillCandidate", "getSkills"]),}

有人可以帮我解决这个问题吗?谢谢!

vue.js vue-component vuex store
1个回答
0
投票

getSkills操作正在执行异步请求。您需要等待请求完成才能访问this.Skills,否则数据尚未设置。

您需要asyncawait(“现代”解决方案:]

async mounted() {
  await this.getSkils();
  this.id = this.$route.params.id;
  this.Skills.forEach(element => this.skill_list.push(element.skill_name));
}

或:

mounted() {
  this.getSkils().then(() => {
    this.id = this.$route.params.id;
    this.Skills.forEach(element => this.skill_list.push(element.skill_name));
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.