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

React使用state存储的用户ID发起Axios请求参数为空问题求助

问题根因

  • React 状态更新为异步操作,且你发起fetch获取用户ID属于异步网络请求。你初始化currentuser状态时值为空,Axios请求在fetch还未返回结果、currentuser还未被赋值为正确ID时就已经执行,因此拿到的是初始空值。
  • 渲染时可以正常展示值,是因为setCurrentuser触发组件重新渲染,此时状态已经更新完成。

解决方案

方案1:监听currentuser状态,有值后再发起Axios请求

将Axios请求包裹在依赖currentuser的useEffect中,并且加非空判断,避免空值请求:

useEffect(() => {
  // 只有currentuser有有效值时才发起请求
  if (!currentuser) return
  Axios.request({
    method: 'POST',  
    url: 'http://localhost:3001/api/post',
    data: {
      curus: currentuser
    },
  })
  .then(response => response.data)
  .then(data => {
    // 你的业务逻辑
  })
}, [currentuser])

如果你的Axios请求是由点击等用户操作触发的,在触发逻辑中加非空判断即可:

const fetchMessage = () => {
  if (!currentuser) return
  // 执行Axios请求逻辑
}

方案2:优化服务端SQL查询逻辑,避免SQL注入风险

你当前的SQL语句使用字符串拼接,存在严重的SQL注入漏洞,建议改为参数化查询:

app.post('/api/post', (req, res) => {
  const currentt = req.body.curus
  // 使用参数化查询替代字符串拼接
  const sqlSelect = "SELECT * FROM messagestable WHERE sender = ? OR recipient = ?"
  db.query(sqlSelect, [currentt, currentt], (err, result) => {
    if (err) {
      return res.status(500).send('查询失败')
    }
    res.send(result)
    console.log(currentt)
  })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:54:00