Javascript 为什么在更新对象';什么州?

Javascript 为什么在更新对象';什么州?,javascript,reactjs,Javascript,Reactjs,我正试图迭代我的json来创建一个无限滚动条。加载时,我将显示前2条记录。当有人滚动到页面底部时,我试图更新我的对象,以显示当前的2条记录,并将下2条记录附加到该对象 我尝试通过合并当前对象和一个新对象以及接下来的两条记录来更新对象的状态,但我一直得到“TypeError:newData.map不是函数” 功能卡(){ const[roomsData,setroomsData]=useState([]); const[prevData,setprevData]=useState([]); con

我正试图迭代我的json来创建一个无限滚动条。加载时,我将显示前2条记录。当有人滚动到页面底部时,我试图更新我的对象,以显示当前的2条记录,并将下2条记录附加到该对象

我尝试通过合并当前对象和一个新对象以及接下来的两条记录来更新对象的状态,但我一直得到“TypeError:newData.map不是函数”

功能卡(){
const[roomsData,setroomsData]=useState([]);
const[prevData,setprevData]=useState([]);
const[newData,setnewData]=useState([]);
const[nextData,setnextData]=useState([]);
常量[startIndex,setstartIndex]=useState(0);
const[lastIndex,setlastIndex]=useState(2);
useffect(()=>{
get(`/data/rooms.json`)
。然后(res=>{
const roomDataRes=res.data;
setroomsData(roomDataRes);
setprevData(roomDataRes.slice(startIndex,lastIndex));
setnewData(roomDataRes.slice(startIndex,lastIndex));
})
}, []);
//检测页面滚动结束
useffect(()=>{
window.addEventListener('scroll',handleScroll);
return()=>window.removeEventListener('scroll',handleScroll);
}, []);
//页面滚动结束后会发生什么
函数handleScroll(){
如果(window.innerHeight+document.documentElement.scrollTop!==document.documentElement.offsetHeight)返回;
setnextData(newData.slice(2,4));
setnewData({…prevData,…nextData});
}
const cards=newData.map((项目、索引)=>
);
返回(
{卡片}
);
}
导出默认卡;

当您滚动到页面底部时,我希望卡片会更新以显示当前记录以及接下来的两条记录,但当您滚动到底部时,我会继续重新呈现:TypeError:newData.map不是一个函数,问题是您正在将
newData
更改为一个对象

setnewData({…prevData,…nextData})

使用

setnewData([…prevData,…nextData])


相反。

似乎有效,但出于好奇,为什么?它们不是都是对象吗?@obreezy是的,它们都是
Array
的对象。这个原型有一些额外的功能,比如
map
reduce
,等等,还有一些额外的属性。