Javascript 当使用react-TypeError中的hook useState函数更改列表的值时,无法使用react更新列表。map不是函数
我想得到一个值列表,每当它的值通过hook-setState函数更改时更新,但是我得到一个错误,我不知道为什么。。。我得到一个.map不是一个函数类型错误 下面是我的代码,我还有一个代码沙盒链接:Javascript 当使用react-TypeError中的hook useState函数更改列表的值时,无法使用react更新列表。map不是函数,javascript,reactjs,use-effect,use-state,map-function,Javascript,Reactjs,Use Effect,Use State,Map Function,我想得到一个值列表,每当它的值通过hook-setState函数更改时更新,但是我得到一个错误,我不知道为什么。。。我得到一个.map不是一个函数类型错误 下面是我的代码,我还有一个代码沙盒链接: 从“axios”导入axios; 从“react”导入{useState,useffect}; const fetchInvestment=async()=>{ const res=等待axios.get( "https://6r3yk.sse.codesandbox.io/api/investmen
从“axios”导入axios;
从“react”导入{useState,useffect};
const fetchInvestment=async()=>{
const res=等待axios.get(
"https://6r3yk.sse.codesandbox.io/api/investments/60b2696de8be014bac79a2a1"
);
收益率、数据、投资、收益;
};
导出默认函数(){
const[incomes,setincomers]=useState([]);
const[date,setDate]=使用状态(未定义);
const[value,setValue]=使用状态(未定义);
useffect(()=>{
const getInvestments=async()=>{
const res=等待获取投资();
收入(res);
};
如果(长度===0){
getInvestments();
}
控制台.日志(收入);
},[收入];
返回(
你好,代码沙盒
{
设置日期(如目标值);
}}
/>
setValue(e.target.value)}
/>
{
const income={};
收入[日期]=数量(价值);
设置收入(收入.推送(收入));
设置超时(()=>{
控制台.日志(收入);
}, 2000);
}}
>
拯救
{收入.地图((收入)=>(
-
{Object.keys(income)}:{Object.values(income)}
))}
);
}
替换此行:
setIncomes(incomes.push(income));
用这个
setIncomes([…incomes,income]);
.push
方法返回数组的长度,而不是实际数组的长度。您可以使用spread操作符展开当前数组,然后将新项添加到该数组的末尾
这样做也应该有效:
收入推送(收入)
设定收入(收入)
替换此行:
setIncomes(incomes.push(income));
用这个
setIncomes([…incomes,income]);
.push
方法返回数组的长度,而不是实际数组的长度。您可以使用spread操作符展开当前数组,然后将新项添加到该数组的末尾
这样做也应该有效:
收入推送(收入)
设定收入(收入)
您可能会收到该错误,因为从API返回的数据不是数组。从您的代码判断,我猜您需要一个键/值映射,它在JS中是一个对象。您可能可以使用
Object.keys(incomeries).map(…)
,但是在不知道具体的响应格式的情况下,我不能确定
您的代码还有两个其他问题:
首先,您不能将推到上,因为它是一个反应状态数组。相反,您需要使用setIncomers
回调
setIncomes([...incomes, income])
此外,您使用
Object.keys
和Object.values
的方式不正确。同样,如果不知道响应格式的具体信息,就无法说出正确的方法。可能是因为从API返回的数据不是数组,所以会出现错误。从您的代码判断,我猜您需要一个键/值映射,它在JS中是一个对象。您可能可以使用Object.keys(incomeries).map(…)
,但是在不知道具体的响应格式的情况下,我不能确定
您的代码还有两个其他问题:
首先,您不能将推到上,因为它是一个反应状态数组。相反,您需要使用setIncomers
回调
setIncomes([...incomes, income])
此外,您使用
Object.keys
和Object.values
的方式不正确。同样,如果不知道您的响应格式的具体信息,就无法说出正确的方式。非常感谢,您保存了我的日期非常感谢,您保存了我的日期承诺是挂起的,或者数据是对象而不是数组。承诺是挂起的,或者数据是对象而不是数组。