即使我添加了 ID 变量,对端点的删除调用中 "ID" 的变量也设置为 "undefined"
Variable for "ID" in delete call to endpoint is set to "undefined" even when I have an ID variable added
所以我有一个网络应用程序使用 axios 向我的 api 发出端点请求,它在 Swagger 上。在我的应用程序中,当前获取和 post 调用有效,但无法放置或删除。
对于删除调用,我将用户 ID 传递到 URL 中的 ID 字段:
const onDelete = (userId) => {
axios.delete(`https://localhost:44373/api/Users/${userId}`)
.then(() => {
getData();
})
}
但是在控制台中却显示了以下两个错误:
DELETE https://localhost:44373/api/Users/undefined 400 xhr.js:210
和:
Uncaught (in promise) Error: Request failed with status code 400
at createError (createError.js:16:1)
at settle (settle.js:17:1)
at XMLHttpRequest.onloadend (xhr.js:66:1)
这是我的完整“ReadUser”文件:
import React, { useEffect, useState } from 'react';
import axios from 'axios';
import { Table } from 'react-bootstrap';
import { BrowserRouter as Router, Route } from 'react-router-dom'
import { Link } from 'react-router-dom';
export default function Read() {
const setData = (data) => {
let { userId, firstName, lastName, emailAddress, phoneNumber, password } = data;
localStorage.setItem('UserId', userId);
localStorage.setItem('First Name', firstName);
localStorage.setItem('Last Name', lastName);
localStorage.setItem('EmailAddress', emailAddress);
localStorage.setItem('Phonenumber', phoneNumber);
localStorage.setItem('Password', password)
}
const url = `https://localhost:44373/api/Users`;
const getData = () => {
axios.get(url)
.then((getData) => {
setAPIData(getData.data);
})
}
const onDelete = (userId) => {
axios.delete(`https://localhost:44373/api/Users/${userId}`)
.then(() => {
getData();
})
}
const [APIData, setAPIData] = useState([]);
useEffect(() => {
axios.get(`https://localhost:44373/api/Users`)
.then((response) => {
setAPIData(response.data);
})
}, [])
return (
<div>
<Table bordered>
<thead>
<tr>
<th key="firstName">First Name</th>
<th key="lastName">Last Name</th>
<th key="emailAddress">Emailaddress</th>
<th key="phoneNumber">Phonenumber</th>
<th>Update</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
{APIData.map((data) => {
return (
<tr>
<td>{data.firstName}</td>
<td>{data.lastName}</td>
<td>{data.emailAddress}</td>
<td>{data.phoneNumber}</td>
<td><Link to='/UpdateUser'><td><button className="table-btn" onClick={() => setData(data)}>Update</button></td></Link></td>
<td>
<button className="table-btn" onClick={() => onDelete(data.id)}>Delete</button>
</td>
</tr>
)
})}
</tbody>
</Table>
</div>
)
}
我还不断收到“警告:列表中的每个 child 都应该有一个唯一的“关键”道具。”
但据我所知我添加了正确的密钥?感谢您的帮助!
您没有在 axios.put
请求正文中添加 userId
。示例:
const updateAPIData = () => {
axios.put(`https://localhost:44373/api/Users/${userId}`, {
userId,
lastName,
emailAddress,
phoneNumber,
password
}).then(() => {
navigate('/ReadUser')
})
}
const onDelete = (userId) => {
axios.delete(`https://localhost:44373/api/Users/${userId}`, { data: { userId }})
.then(() => {
getData();
})
}
这是解决 JSX 键问题的方法:
{APIData.map((data, index) => {
return (
<tr key={index}>
....
<button className="table-btn" onClick={() => onDelete(data.userId)}>Delete</button>
可能是cors。
前段时间我遇到了同样的问题。 postman 一切正常,但 google chrome.
问题在于,当发送 get 和 post 以外的方法时,您的浏览器将发送预检请求以确保您有权发出请求。
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
How to handle preflight CORS request using Node server?
对于唯一键:
当你映射一个数组时,每个元素应该有一个唯一的键属性。
在你的情况下你应该
<tr key={unique_key}>
最佳做法是使用数据库中元素的 ID,例如:
<tr key={data.id}>
您可以使用数组索引,但这是一种不好的做法,因为它可能会改变并在您的应用程序中引入错误。
所以我有一个网络应用程序使用 axios 向我的 api 发出端点请求,它在 Swagger 上。在我的应用程序中,当前获取和 post 调用有效,但无法放置或删除。
对于删除调用,我将用户 ID 传递到 URL 中的 ID 字段:
const onDelete = (userId) => {
axios.delete(`https://localhost:44373/api/Users/${userId}`)
.then(() => {
getData();
})
}
但是在控制台中却显示了以下两个错误:
DELETE https://localhost:44373/api/Users/undefined 400 xhr.js:210
和:
Uncaught (in promise) Error: Request failed with status code 400
at createError (createError.js:16:1)
at settle (settle.js:17:1)
at XMLHttpRequest.onloadend (xhr.js:66:1)
这是我的完整“ReadUser”文件:
import React, { useEffect, useState } from 'react';
import axios from 'axios';
import { Table } from 'react-bootstrap';
import { BrowserRouter as Router, Route } from 'react-router-dom'
import { Link } from 'react-router-dom';
export default function Read() {
const setData = (data) => {
let { userId, firstName, lastName, emailAddress, phoneNumber, password } = data;
localStorage.setItem('UserId', userId);
localStorage.setItem('First Name', firstName);
localStorage.setItem('Last Name', lastName);
localStorage.setItem('EmailAddress', emailAddress);
localStorage.setItem('Phonenumber', phoneNumber);
localStorage.setItem('Password', password)
}
const url = `https://localhost:44373/api/Users`;
const getData = () => {
axios.get(url)
.then((getData) => {
setAPIData(getData.data);
})
}
const onDelete = (userId) => {
axios.delete(`https://localhost:44373/api/Users/${userId}`)
.then(() => {
getData();
})
}
const [APIData, setAPIData] = useState([]);
useEffect(() => {
axios.get(`https://localhost:44373/api/Users`)
.then((response) => {
setAPIData(response.data);
})
}, [])
return (
<div>
<Table bordered>
<thead>
<tr>
<th key="firstName">First Name</th>
<th key="lastName">Last Name</th>
<th key="emailAddress">Emailaddress</th>
<th key="phoneNumber">Phonenumber</th>
<th>Update</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
{APIData.map((data) => {
return (
<tr>
<td>{data.firstName}</td>
<td>{data.lastName}</td>
<td>{data.emailAddress}</td>
<td>{data.phoneNumber}</td>
<td><Link to='/UpdateUser'><td><button className="table-btn" onClick={() => setData(data)}>Update</button></td></Link></td>
<td>
<button className="table-btn" onClick={() => onDelete(data.id)}>Delete</button>
</td>
</tr>
)
})}
</tbody>
</Table>
</div>
)
}
我还不断收到“警告:列表中的每个 child 都应该有一个唯一的“关键”道具。”
但据我所知我添加了正确的密钥?感谢您的帮助!
您没有在 axios.put
请求正文中添加 userId
。示例:
const updateAPIData = () => {
axios.put(`https://localhost:44373/api/Users/${userId}`, {
userId,
lastName,
emailAddress,
phoneNumber,
password
}).then(() => {
navigate('/ReadUser')
})
}
const onDelete = (userId) => {
axios.delete(`https://localhost:44373/api/Users/${userId}`, { data: { userId }})
.then(() => {
getData();
})
}
这是解决 JSX 键问题的方法:
{APIData.map((data, index) => {
return (
<tr key={index}>
....
<button className="table-btn" onClick={() => onDelete(data.userId)}>Delete</button>
可能是cors。
前段时间我遇到了同样的问题。 postman 一切正常,但 google chrome.
问题在于,当发送 get 和 post 以外的方法时,您的浏览器将发送预检请求以确保您有权发出请求。 https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
How to handle preflight CORS request using Node server?
对于唯一键: 当你映射一个数组时,每个元素应该有一个唯一的键属性。
在你的情况下你应该
<tr key={unique_key}>
最佳做法是使用数据库中元素的 ID,例如:
<tr key={data.id}>
您可以使用数组索引,但这是一种不好的做法,因为它可能会改变并在您的应用程序中引入错误。