【问题标题】:Vuex action can't access property valueVuex 操作无法访问属性值
【发布时间】:2021-10-02 21:05:18
【问题描述】:

我似乎无法将数据传递给我的 Vuex 操作。我总是收到错误消息TypeError: can't access property x, data is undefined。我已经做了一些不同的方法来传递属性值,但我无法让它发挥作用。你能看看我的代码,我做错了什么吗?

商店:

import axios from 'axios'

export default {
  namespaced: true,
  state: {
    announcements: []
  },
  getters: {},
  actions: {
    createAnnouncement({ commit }, courseId, data) {
      return new Promise((resolve, reject) => {
        axios
        .post(`teacher/courses/announcements/create/${courseId}`, { title: data.title, message: data.message })
        .then((response) => {
          commit('ADD_ANNOUNCEMENT', response.data.data)
          resolve(response)
        })
        .catch((error) => { reject(error) })
      })
    }
  },
  mutations: {
    ADD_ANNOUNCEMENT(state, newAnnouncement) {
      state.announcements.push(newAnnouncement)
    }
  }
}

组件:

<script>
import { mapActions, mapGetters } from 'vuex'

export default {
  data() {
    return {
      title: '',
      message: '',
    }
  },
  computed: {
    ...mapGetters('courses', ['getCourseData'])
  },
  methods: {
    ...mapActions('announcements', ['createAnnouncement']),
    onSubmit() {
      const { announcementTitle, announcementMessage } = this
      const courseId = this.getCourseData.id
      this.createAnnouncement(courseId, { title: announcementTitle, message: announcementMessage }) 
    }
  }
}
</script>

【问题讨论】:

  • 如果我需要两个参数,解决问题的最佳方法是什么?

标签: javascript vue.js vuex vuejs3


【解决方案1】:

动作只接受两个参数,context 和一个可选的payload。

尝试将您的操作更改为

createAnnouncement({ commit }, { courseId, data }) {
  //...
}

并发送它

const payload = {
  courseId: this.getCourseData.id,
  data: {
    title: this.announcementTitle,
    message: this.announcementMessage
  }
}
this.createAnnouncement(payload)

见https://vuex.vuejs.org/api/#actions

【讨论】:

  • 成功了,谢谢!我不知道行动只接受两个论点。我是 VueJs/Vuex 的新手,仍在努力学习。
  • @LAZYASSKID 没问题。 Vuex 指南有时可能有点晦涩难懂。我已经链接了应该更清楚的 API 文档
猜你喜欢
  • 2021-10-22
  • 2020-04-28
  • 2021-06-06
  • 1970-01-01
  • 2012-03-19
  • 2020-08-29
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
相关资源
最近更新 更多