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

React JS 发送POST请求时body动态键取变量名而非实际值问题求解

问题原因

在JavaScript对象字面量语法中,直接编写{ field: content }时,键名field会被识别为固定字符串,不会解析为你传入的field变量的实际值,这就是硬编码email可正常运行、使用field变量失效的核心原因。

解决方案

使用ES6引入的计算属性名语法即可实现动态键名,只需将键名用方括号[]包裹即可,修改后代码如下:

body: JSON.stringify({ [field]: content })

将你原代码中注释的无效行替换为上述写法,就可以自动读取field参数的实际值作为请求体键名,适配不同接口的传参要求。

可选优化点
  • 你的当前自定义Hook没有返回请求结果data,调用侧无法拿到返回值,建议在函数末尾添加return data
  • 可新增加载状态、错误状态的返回,方便调用侧处理加载中、请求失败的交互场景,优化后完整代码参考:
Request.useSendPostWithBody = (endpoint, field, content) => {
    const [data, setData] = useState('')
    const [loading, setLoading] = useState(true)
    const [error, setError] = useState(null)

    useEffect(() => {
        setLoading(true)
        fetch(`${window.ipAddress.ip}/${endpoint}`, {
            method: "POST",  
            headers:{'Content-Type':'application/json'},
            body: JSON.stringify({ [field]: content })
        })
        .then((result)=> result.json())
        .then((res)=>{ 
            setData(res)
            setError(null)
        })
        .catch(err =>{ 
            console.error("请求错误:", err)
            setError(err)
        })
        .finally(() => {
            setLoading(false)
        })
    // 补全useEffect依赖项,避免闭包导致的参数更新不生效问题
    }, [endpoint, field, content])

    return { data, loading, error }
}
  • 调用侧可直接解构获取状态使用:
const { data, loading, error } = Request.useSendPostWithBody("User/checkAlt","email","XXX@XXX.uk")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:06:05