如何获取POST请求发送对象的ID并保存至PointID数组?
解决方法:获取后端返回的ID并更新到state的PointID数组里
我来帮你搞定这个问题~ 核心思路就是在后端返回数据后,从响应里取出分配的ID,然后通过setState把它加到你的PointID数组里。这里还要注意setState的异步特性,用函数式更新会更安全,避免因为异步导致的state不一致问题。
修改后的代码如下:
state = { elements: [], PointID: [] } appendElement = (Name, Description, X, Y) => { // 用函数式更新elements,确保基于最新的state添加元素 this.setState(prevState => ({ elements: [...prevState.elements, { Name, Description, X, Y }] })) const newItem = { "Name": Name, "Y": Y, "X": X, "RouteId": 1, "Description": Description } fetch("http://dearjean.ddns.net:44301/api/Points3", { method: "post", headers: { "Content-Type": "application/json" }, body: JSON.stringify(newItem) }) .then(res => { // 先检查请求是否成功 if (!res.ok) { throw new Error('请求失败,请检查后端服务'); } return res.json(); }) .then(res => { console.log('后端返回的数据:', res); // 从返回的res中取出ID,这里假设后端返回的字段是Id,你要根据实际情况调整! const newPointId = res.Id; // 用函数式更新PointID数组,把新ID加进去 this.setState(prevState => ({ PointID: [...prevState.PointID, newPointId] })) }) .catch(err => { // 处理请求错误,比如网络问题、后端报错 console.error('提交数据时出错:', err); }); };
关键点解释:
- 函数式更新state:原来直接用
this.state.elements的方式,因为setState是异步的,可能会拿到旧的state值,导致数据覆盖。用prevState参数就能确保每次都是基于最新的state来更新。 - 提取后端返回的ID:你需要确认后端返回的JSON对象里,ID对应的字段名是什么(比如可能是
id、pointId或者Id),把res.Id改成对应的字段就行。 - 错误处理:添加了
res.ok的检查和catch块,避免请求失败时没有任何提示,方便调试问题。
这样修改后,每次提交表单数据到后端,拿到返回的ID后就会自动加到PointID数组里啦~
内容的提问来源于stack exchange,提问作者drcielak
相关产品推荐
相关产品推荐

