Javascript 反应:axios的PUT值为空
我有一个简单的列表,可以通过API使用axios获得。 每个元素都是可修改的输入,有自己的更新按钮 更改输入数据后,在执行PUT请求时,Javascript 反应:axios的PUT值为空,javascript,reactjs,Javascript,Reactjs,我有一个简单的列表,可以通过API使用axios获得。 每个元素都是可修改的输入,有自己的更新按钮 更改输入数据后,在执行PUT请求时,console.log(test)返回空值 我检查了console.log(newList)这是列表的数组,列表中确实发生了变化的数据,但它们似乎无法发送到服务器 注意:API只是用于测试,PUT方法可能不起作用,但至少应该发送控制台中的值 注2:我不知道如何在url中放置列表项的id,这样您可能会遇到错误您可以尝试使用1、2或3来代替测试 import Re
console.log(test)代码>返回空值
我检查了console.log(newList)
这是列表的数组,列表中确实发生了变化的数据,但它们似乎无法发送到服务器
注意:API只是用于测试,PUT方法可能不起作用,但至少应该发送控制台中的值
注2:我不知道如何在url中放置列表项的id
,这样您可能会遇到错误您可以尝试使用1、2或3来代替测试
import React,{useState,useffect}来自“React”;
从“axios”导入axios;
导出默认值()=>{
const[list,setList]=React.useState([]);
const[name,setName]=React.useState(“”);
const[description,setDescription]=React.useState(“”);
const[city,setCity]=React.useState(“”);
//从API获取初始列表
useffect(()=>{
axios
.get(“https://6092374385ff5100172122c8.mockapi.io/api/test/users")
。然后((响应)=>{
setList(response.data);
控制台日志(响应);
})
.catch((err)=>console.log(err));
}, []);
//onUpdate更新API中的数据
const onUpdate=(e)=>{
e、 预防默认值();
常数测试={
姓名:姓名,,
描述:描述,
城市:城市
};
控制台日志(测试);
//axios请求将数据放在API上
axios
.放(
"https://6092374385ff5100172122c8.mockapi.io/api/test/users“+id,
测试
)
。然后((res)=>{
警惕(“成功”);
控制台日志(res);
})
.catch((错误)=>{
console.log(错误);
});
//更新后,axios请求GET从数据库获取新的修改列表
axios
.get(“https://6092374385ff5100172122c8.mockapi.io/api/test/users")
。然后((res)=>{
警惕(“成功”);
控制台日志(res);
})
.catch((错误)=>{
console.log(错误);
});
};
//用于更改每个输入值的处理程序
函数handleChangeUpdate(id,事件){
常量{name,value}=event.target;
const newList=list.map((项)=>{
如果(item.id==id){
常量updateItem={
…项目,
[名称]:值
};
返回updateItem;
}
退货项目;
});
设置列表(newList);
console.log(newList);
}
返回(
{list.map((项)=>(
-
handleChangeUpdate(item.id,event)}
defaultValue={item.name}
>
handleChangeUpdate(item.id,event)}
defaultValue={item.description}
>
handleChangeUpdate(item.id,event)}
defaultValue={item.city}
>
更新
))}
);
};
这是因为您从未设置道具的值。这就是为什么它们从不改变初始值的原因。您只需更新handleChangeUpdate中的列表
道具。对于现有文件结构,您需要采取两个步骤:
使handleChangeUpdate能够区分不同的道具(城市、描述等)。例如,通过传递道具的名称
在handleChangeUpdate中更新道具的值
要实现第一步,可以按如下方式更改输入标记:
{/*注意handleChangeUpdate的第一个参数*/}
handleChangeUpdate(“name”,item.id,event)}
defaultValue={item.name}
>
然后,您需要调整handleChangeUpdate:
if(name==“name”){
设置名称(值);
}else if(名称==“说明”){
设置描述(值);
}else if(名称==“城市”){
设定值;
}
顺便说一句,list不是变量的好名字
或者
在不创建新参数的情况下,也可以仅使用事件来设置道具
//用于更改每个输入值的处理程序
函数handleChangeUpdate(id,事件){
常量{name,value}=event.target;
const newList=list.map((项)=>{
如果(item.id==id){
常量updateItem={
…项目,
[名称]:值
};
返回updateItem;
}
退货项目;
});
设置列表(newList);
console.log(newList);
如果(名称==“名称”){
设置名称(值);
}else if(名称==“说明”){
设置描述(值);
}else if(名称==“城市”){
设定值;
}
}
我认为onUpdate
功能中有3个错误
您没有从onClick
事件传递项目的id
您的put
方法应该更改
您不应该在put
请求之后立即执行get
请求,因为有时后端还不会更新
您可以按如下方式更新代码
1.单击按钮时传递项目的id
<button onClick={onUpdate(item.id)}>Update</button>
3.在响应put
请求后执行get
请求
const onUpdate = (e) => {
const test = {
name: name,
description: description,
city: city
};
console.log(test);
// axios request PUT data on API
axios
.put(
`https://6092374385ff5100172122c8.mockapi.io/api/test/users/${e}`,
test
)
.then((res) => {
console.log(res);
// axios request GET to get the new modified list from the database, after the update
axios
.get("https://6092374385ff5100172122c8.mockapi.io/api/test/users")
.then((res) => {
alert("success");
console.log(res);
})
.catch((error) => {
console.log(error);
});
})
.catch((error) => {
console.log(error);
});
};
是的,newList
一旦更改,确实在更改。然而,const test
总是空的,因为你不需要setName()
,setDescription()
,setCity()
,你说的是什么意思?它们已经在hooks中设置了,不是吗?是的,它在hooks中,但您只是读取name
,而不是首先使用setName
写入值。这就是为什么你总是有空值(默认值为“”)@ganhongjian我明白了。你介意来看看吗
axios
.put(
`https://6092374385ff5100172122c8.mockapi.io/api/test/users/${e}`,
test
).then((res) => {
alert("success");
console.log(res);
})
.catch((error) => {
console.log(error);
});
const onUpdate = (e) => {
const test = {
name: name,
description: description,
city: city
};
console.log(test);
// axios request PUT data on API
axios
.put(
`https://6092374385ff5100172122c8.mockapi.io/api/test/users/${e}`,
test
)
.then((res) => {
console.log(res);
// axios request GET to get the new modified list from the database, after the update
axios
.get("https://6092374385ff5100172122c8.mockapi.io/api/test/users")
.then((res) => {
alert("success");
console.log(res);
})
.catch((error) => {
console.log(error);
});
})
.catch((error) => {
console.log(error);
});
};