Javascript 如何在useState中迭代数组

Javascript 如何在useState中迭代数组,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,对于useState的基本函数(希望如此),我有以下问题,但我还没有得到。我想得到一份任务清单,上面有以前写的所有任务。我试着用两种方法来解决这个问题: 第一种方法: const [ favoritedList, setFavoritedList ] = useState([]); const handleFavoritedVideo = (favoritedElement) => { setFavoritedList((previousFavorited) => {

对于useState的基本函数(希望如此),我有以下问题,但我还没有得到。我想得到一份任务清单,上面有以前写的所有任务。我试着用两种方法来解决这个问题:

第一种方法:

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
是的,绝对可以。在我看来,把它当作一个对象而不是数组是过于复杂了。