javascript - TypeError: .some 不是函数 React JS 错误
问题描述
const [userFavorites, setUserFavorites]= useState([]);
这是我的代码的一部分,它将 userFavorites 的状态设置为一个数组,我在其他地方有一个函数试图做userFavorites.some
并且我保留TypeError: userFavorites.some is not a function
. 我很感激任何帮助!
解决方案
如果您可以发布整个代码片段,那么回答将很有帮助。虽然你可能正在做这样的事情。
最初,它被声明为一个空数组[]
,但有可能在您的代码中某处您正在设置这样的状态。
setUserFavorites(someDataFromAPICallORPostOperation).
在这里,您someDataFromAPICallORPostOperation
可能是未定义的。
您可以通过两种方式解决此问题。
1.设置状态时默认为空数组。
setUserFavorites(someDataFromAPICallORPostOperation ?? []).
undefined
2.在调用.some
函数之前检查。
userFavorites?.some(function) // Using optional chaining
或者
userFavorites && userFavorites.some(function)
编辑- 基于评论链接中提到的代码。
数组推送操作不会返回更新后的数组,而是返回更新后的数组中的元素个数。
这可以解决为
function addFavoritesHandler(favoriteMeetup) {
setUserFavorites(prevUserFavorites => {
return [...prevUserFavorites, favoriteMeetup];
});
}
解释,早些时候你在做这样的事情。
function addFavoritesHandler(favoriteMeetup) {
setUserFavorites(prevUserFavorites => {
return prevUserFavorites.push(favoriteMeetup);
});
}
在这里,您将状态设置为数字而不是数组,因为push
将返回该数组中的元素数。因此,当您将 设置为数字而不是数组时,这样做userFavorites.some
会引发错误。userFavorites
推荐阅读
- html - 目前无法在屏幕上显示超过四个投诉。如何更改 html 或 css 以适应更多?
- react-native - 尝试在反应原生 Ignite 模板中使用 MST 时出现“未定义不是对象”错误
- java - java.lang.IllegalArgumentException:partBoundary 不能为空
- android - 当我滚动 Recylerview 时,Admob NativeAd 显示空白
- javascript - 隐身窗口中的 twilio 视频无法正常工作
- java - 在 gradle 项目中添加 graphql 依赖项时出错
- python - Django:根据外键的字段值更改字段和相应的表单
- reactjs - 如何在 React 中进行插值
- swift - 如何在 Alamofire.responseJSon 的 completionHandler 中获取数据
- c - 我在哪里退货?