You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React使用Axios发送Post请求时如何格式化Payload的data字段

问题描述

我是该技术领域的初学者,若表述存在不当之处还请谅解。目前我搭建了一个简易Web UI,包含用于输入Name的文本框、用于选择类型的复选框以及提交按钮。

测试代码如下:

value = "val7";
key = "63";
typeID = 103;
name = "testname";

const onSubmitClick = (event) => {
    axiosPost('testurl',
    {
        Message: {
            Type: typeID,
            Payload: {
                title: null,
                messagebody: null,
                data: {
                    value,
                    key,
                },
            },
            Delivery: {
                Name: [{"Name": name}]
            }
        }
    })
}

点击提交按钮时,当前发送的Payload结构如下:

{
    "Message": {
        "Type": 103,
        "Payload": {
            "title": null,
            "messagebody": null,
            "data": {
                "value": "val17",
                "key": "63"
            }
        },
        "Delivery": {
            "Name": [{
                "Name": "testname"
            }]
        }
    }
}

实际需要的Payload中data部分结构如下:

{
    "Message": {
        "Type": 103,
        "Payload": {
            "title": null,
            "messagebody": null,
            "data": {
                "val17": "63"
            }
        },
        "Delivery": {
            "Name": [{
                "Name": "testname"
            }]
        }
    }
}
解决方案

你当前的写法是对象属性的简写语法,{value, key}等价于{value: value, key: key},会生成固定名为value、key的两个属性,和你需要的「变量值作为属性名」的需求不符。
直接使用ES6的计算属性名语法即可,把data字段的写法修改为:

data: {
    [value]: key
}

修改后的完整提交逻辑代码:

const onSubmitClick = (event) => {
    axiosPost('testurl',
    {
        Message: {
            Type: typeID,
            Payload: {
                title: null,
                messagebody: null,
                data: {
                    [value]: key
                },
            },
            Delivery: {
                Name: [{"Name": name}]
            }
        }
    })
}

如果需要兼容不支持ES6的极老旧运行环境,可以先初始化空对象,再通过方括号语法动态赋值属性:

const payload = {
    Message: {
        Type: typeID,
        Payload: {
            title: null,
            messagebody: null,
            data: {},
        },
        Delivery: {
            Name: [{"Name": name}]
        }
    }
}
payload.Message.Payload.data[value] = key;
axiosPost('testurl', payload)

内容的提问来源于stack exchange,提问作者C9Tolan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 20:18:29