使用 vuex 操作发送的数据 return 未定义

data sent with vuex action return undefined

我正在使用带有 vuex 的 axios,我需要使用 json 形式发送数据以执行 post 请求并使用 axios 添加新行,我正在使用 vuex,当动作被触发时它不保留数据并将其发送到操作中,数据 json 是在 vue 组件上创建的,但不要将其发送到操作中以执行 axios post :

Action.js:

export const addClassification = ({data}) => {
    console.log('data actio:', {data})
    axios
    .post("/vendor/classification/save", data, {
        headers: {
            "Content-Type": "application/json",
            //  withCredentials: true //sent with cookie
            Authorization: "Bearer " + Vue.$cookies.get("jwt"),
        }
    })
    .then((res) => {
        console.log('res', res)
        // commit("ADD_TO_CLASSIFICATION", data);
    })
    .catch((err) => {
        console.log(err);
    });

state.js:

export default {
    vendorClassificationList: [],
}

page.vue:

<BaseButton
    label="Modifier"
    classValue="btn-outline-primary"
    @click.native="addClassificationData"
/>
data() {
    return {
        submitStatus: "",
        name: this.$route.params.name,
        id: this.$route.params.id,
        code: this.$route.params.code,
        jsonData:[]
    };
},
methods: {
    ...mapActions(["addClassification"]),
    addClassificationData() {
        this.jsonData = JSON.stringify({
            id: null,
            name: this.name,
            code:this.code,
            active:true
        })
        console.log('json is', this.jsonData)
        this.addClassification({
            data : this.jsonData
        })
    },

Actions 是 Vuex 接收 vuex 上下文作为第一个参数,如你所见in the docs

换句话说,如果您更改 Action.js:

addClassification = ( {data}) => {

addClassification = (vuexContext, {data}) => {

它应该可以解决问题。您可以调用参数 vuexContextcontext,在需要时对其进行解构,或者在未使用时调用它 _(如您的情况),只要它存在,这并不重要。

你的 vuex 动作是错误的。您缺少可以使用参数重组的上下文。此外,您可能需要在提交中发送 res.data 而不是 res,具体取决于您在突变中所做的事情。

actions: {
   addClassification ({ commit }, payload) {
      axios
        .post("/vendor/classification/save", payload, {
            headers: {
                "Content-Type": "application/json",
                //  withCredentials: true //sent with cookie
                Authorization: "Bearer " + Vue.$cookies.get("jwt"),
            }
        })
        .then((res) => {
            console.log('res', res)
            commit("ADD_TO_CLASSIFICATION", res.data);
        })
        .catch((err) => {
            console.log(err);
        })
   }
}