如果您可以发布整个代码 sn-p 那么这将有助于回答。虽然你可能正在做这样的事情。
最初,它被声明为一个空数组[],但有可能在您的代码中某处您正在设置这样的状态。
setUserFavorites(someDataFromAPICallORPostOperation).
这里,您的someDataFromAPICallORPostOperation 可能未定义。
您可以通过两种方式解决此问题。
1.设置状态时默认为空数组。
setUserFavorites(someDataFromAPICallORPostOperation ?? []).
2。在调用.some 函数之前检查undefined。
userFavorites?.some(function) // Using optional chaining
或
userFavorites && userFavorites.some(function)
编辑 - 基于注释链接中提到的代码。
数组push操作不返回更新后的数组,而是返回更新后的数组中的元素个数。
这个可以解决
function addFavoritesHandler(favoriteMeetup) {
setUserFavorites(prevUserFavorites => {
return [...prevUserFavorites, favoriteMeetup];
});
}
说明,之前你在做这样的事情。
function addFavoritesHandler(favoriteMeetup) {
setUserFavorites(prevUserFavorites => {
return prevUserFavorites.push(favoriteMeetup);
});
}
在这里,您将状态设置为数字而不是数组,因为push 将返回该数组中元素的数量。因此,在执行 userFavorites.some 时会引发错误,因为您将 userFavorites 设置为数字而不是数组。