如何在 Vuex 中通过 POST 请求发送状态数据?

Posted

技术标签:

【中文标题】如何在 Vuex 中通过 POST 请求发送状态数据?【英文标题】:How to send state data via POST request in Vuex? 【发布时间】:2021-06-09 06:12:14 【问题描述】:

背景:我有一个名为 'expense' 的 Vuex 状态对象,它通过“表单组件”中的表单输入字段进行更新.我需要通过 POST 发送那个“费用”对象

问题:我设置了一个发出 POST 请求的操作。但是存储在状态中的“expense”对象没有被发送。

PS: POST 请求成功,但响应证明它没有发送数据。

响应数据:

存储状态


const mainURI = "/api/budget";

const expenseObj = 
  expensesKey: "",
  expensesValue: null,
  subExpense: null,
;

export const store = new Vuex.Store(
  state: 
    earnings: null,
    expenses: [
      
        expensesKey: "",
        expensesValue: null,
        subExpense: null,
      ,
    ],
  ,

商店操作

  actions: 
    addBudget(commit, expenses, earnings ) 
      axios
        .post(mainURI, 
          earnings: earnings,
          expenses: expenses,
        )
        .then((res) => 
          console.log(res.data);
            let newExpense = res.data;
           commit("SUBMIT_BUDGET", newExpense);
        );
    ,
  ,

存储方法

  mutations: 
    SUBMIT_BUDGET: (state, payload) => state.newBudget.push(payload),
    UPDATE_EARNINGS: (state, earnings) => state.earnings = earnings;
    UPDATE_KEYS(state, payload) 
      Vue.set(
        state.expenses[payload.index],
        "expensesKey",
        payload.expenseKeyValue
      );
    ,
    UPDATE_VALUE(state, payload) 
      Vue.set(
        state.expenses[payload.index],
        "expensesValue",
        payload.expenseValueValue
      );
    ,
  ,
);

表单组件

computed:
 earnings: 
      get() 
        return this.$store.state.earnings;
      ,
      set(value) 
        this.$store.commit("UPDATE_EARNINGS", value);
      ,
    ,
,
 methods: 
    submitBudget() 
      this.$store.dispatch("addBudget");
      console.log("triggers");
    ,
    updateKey(event, idx) 
      const val = 
        expenseKeyValue: event.target.value,
        index: idx,
      ;
      this.$store.commit("UPDATE_KEYS", val);
    ,
    updateValue(event, idx) 
      const val = 
        expenseValueValue: event.target.value,
        index: idx,
      ;
      this.$store.commit("UPDATE_VALUE", val);
    ,
  

【问题讨论】:

响应无法证明发送的内容。而是检查开发工具中的“网络”选项卡以查看发送的确切内容。 在发送 POST 的“addBudget”操作中,您是否验证过“收入”和“费用”包含您假设的值?此外,请考虑修改您的“addBudget”操作以将“收入”和“费用”作为有效负载。最后,我在控制台日志中看到一个关于使用组件 id 'form' 的 Vue 警告。不确定这是否会导致问题。 @shob 感谢您的回复!当我检查网络时,我给了我 200 的状态,但请求有效负载为空 @Tim 感谢您的反馈!在我检查网络后,没有任何东西被发送。所以我认为问题在于“收益”和“费用”不包含这些值。让我感到困惑的是,在 Vue DevTools 中,当用户在表单中输入后,它们会得到更新。如何将这些状态属性作为有效负载? 【参考方案1】:

当您调度addBudget 操作时,没有有效负载,例如:

this.$store.dispatch('addBudget', objectPayload);

这可能是因为您打算使用来自stateearningsexpenses。如果是这样,您可以删除有效负载参数并从操作上下文中访问state

actions: 
  addBudget( state, commit ) 
    axios.post(mainURI, 
      earnings: state.earnings,
      expenses: state.expenses,
    )
    .then((res) => 
      console.log(res.data);
      let newExpense = res.data;
      commit("SUBMIT_BUDGET", newExpense);
    );
  ,
,

【讨论】:

以上是关于如何在 Vuex 中通过 POST 请求发送状态数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 moya 中通过 POST 请求传递 JSON 正文

如何在 UTF-8 中通过 http post 发送字符串

如何在浏览器中通过 POST 请求加载外国图像?

如何使用 Dio 或 http 在 Flutter 中通过 GET 请求发送参数

currentuser 如何在flutter中通过fcm向另一个用户发送请求通知?

在 Java 中通过 post 方法发送表单