Javascript 如何在useState中迭代数组
对于useState的基本函数(希望如此),我有以下问题,但我还没有得到。我想得到一份任务清单,上面有以前写的所有任务。我试着用两种方法来解决这个问题: 第一种方法:Javascript 如何在useState中迭代数组,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,对于useState的基本函数(希望如此),我有以下问题,但我还没有得到。我想得到一份任务清单,上面有以前写的所有任务。我试着用两种方法来解决这个问题: 第一种方法: const [ favoritedList, setFavoritedList ] = useState([]); const handleFavoritedVideo = (favoritedElement) => { setFavoritedList((previousFavorited) => {
const [ favoritedList, setFavoritedList ] = useState([]);
const handleFavoritedVideo = (favoritedElement) => {
setFavoritedList((previousFavorited) => {
return [ favoritedElement, ...previousFavorited ];
});
};
一切正常
但当我尝试这样做时:
const [ favoritedList, setFavoritedList ] = useState({favorited:[]});
const handleFavoritedVideo = (favoritedElement) => {
setFavoritedList((previousFavorited) => {
return [ favoritedElement, ...previousFavorited ];
});
};
我得到以下错误:
TypeError:previousFavorited不可编辑
这是为什么以及如何修复它?在第二个版本中,您正在将
favoritedList
设置为{favorited:[]}
形式的对象
因此,在函数中,您的previousFavorited
不是列表,而是包含列表的对象,您应该使用previousFavorited.favorited
访问该列表
受影响的代码类似于:
return {favorited: [ favoritedElement, ...previousFavorited.favorited ]};
(编辑:我编写的代码中有一个轻微错误,根据@mikeboharsik的回答进行了更正)useState({favorited:[])
正在初始化favoritedList
到对象
setFavoritedList
中的previousFavoritedList
是favoritedList
的当前值,它是一个对象。因此,您试图在对象
上使用…
,该对象与数组不一样,是无效的
我的建议是使用useState([])
将favoritedList
初始化为普通数组,然后您可以简单地将其视为数组
如果确实必须为收藏夹列表
使用对象
,则解决方案是返回一个对象以保持对象结构的一致性:
返回{favoritedElement:[favoritedElement,…previousFavorited.favorited]}
您不能写入{favorited:[]}
,这是一个对象,请尝试使用…previousFavorited.favorited
是的,绝对可以。在我看来,把它当作一个对象而不是数组是过于复杂了。