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

React中获取点击<li>项的user.id并通过Fetch POST提交的实现问题

实现方案

第一步:补充缺失的状态定义

当前代码未声明clickeduser对应的状态,先在顶部状态声明部分添加,同时调整原有状态的初始值更匹配数据类型:

// 原username存储的是当前用户ID,为数字类型,不要用数组作为初始值
const [username, setUsername] = useState(null);
const [conversatid, setConversatId] = useState(null);
// 新增存储点击用户ID的状态
const [clickeduser, setClickeduser] = useState(null);

第二步:修正li的点击事件绑定

你定义的alluClicked是接收user参数、返回事件处理函数的高阶函数,绑定时需要把当前遍历的user对象传进去:

<li key={user.id} onClick={alluClicked(user)} className="tumtekkul">
  <a> {user.username} </a>
</li>

第三步:完善点击事件逻辑与提交逻辑

在点击事件中完成状态存储,同时可直接触发提交请求,也可以根据业务需求放到其他触发时机执行:

const alluClicked = user => evt => {
  // 将被点击用户的ID存入状态
  setClickeduser(user.id);
  // 直接调用提交接口,也可以移到其他按钮的点击事件中触发
  convcreate(user.id);
}

// 调整convcreate函数,直接接收传入的目标用户ID,避免状态更新延迟导致的取值异常
const convcreate = (targetUserId) => {
  fetch('http://localhost:8000/api/conversat/', {
    method: 'POST',
    headers: {
      Authorization: `JWT ${localStorage.getItem('token')}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      User1i: username, 
      User2ii: targetUserId
    })
  })
  .then(res => res.json())
  .then(json => {
    setConversatId(json.id);
  });
};

可选优化项

  • 可以添加请求loading状态与错误捕获逻辑,避免接口请求异常时无用户反馈
  • 调用convcreate前可先判断username是否已完成赋值,避免当前用户ID还未获取到就发起请求,导致参数错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 11:24:06