javascript - 未处理的拒绝 (TypeError): {(intermediate value)}.filter 不是函数
问题描述
我正在使用 Reactjs 制作费用清单应用程序。
在此,有一小部分我创建了一个按钮,用于从列表中删除费用,该列表正在向服务器发出API调用,请求从数据库中删除该费用,也在前端。
但是这里的问题是,当函数filter()
被调用时(见下文),它在点击删除按钮时在页面上显示,未处理的拒绝(TypeError):{(中间值)}.filter不是函数...... (但费用从数据库中删除,刷新页面后也在前端过滤掉)。
代码 :
async remove(id){
await fetch(`/api/expenses/${id}`, {
method : 'DELETE',
headers : {
'Accept' : 'application/json',
'Content-Type' : 'application/json'
}
}).then(() => {
let updatedExpenses = {...this.state.Expenses}.filter( i => i.id !== id);
this.setState({Expenses : updatedExpenses});
});
}
我没有发现该filter()
方法有任何问题
为什么它显示Unhandled Rejection (TypeError): {(intermediate value)}.filter is not a function,每次都remove(id)
被调用。
解决方案
您应该转换object
为array
第一个,然后在该数组上使用.filter() ;可能使用Object.entries()或Object.keys()或Object.values();这是一个例子
let filteredValues = Object.values(this.state.Expenses).filter( i => i.id !== id);
编辑:问题比这更简单,可能是错字的结果;你没有任何这些你可以简单地做:
let updatedExpenses = this.state.Expenses.filter( i => i.id !== id)
顺便说一句,错误是错误地使用了扩展语法;你用对象而不是像这样的数组来包装它,[...this.state.Expenses]
这将创建一个数组的副本Expenses
;但它是多余的,因为.filter()
将返回新数组。
推荐阅读
- python - Python Selenium 找不到输入
- php - 成熟 Yii1 项目中为 DB 创建虚拟数据的控制台命令
- reactjs - 即使 React 应用程序从与 Spring Boot 相同的端口提供服务,cookie 也未在 chrome 中设置
- c# - 从多个不同的第三方 api 或每个第三方 rest api 端点获取多个表的数据的一个表?
- html - 当它们在 HTML 中垂直堆叠/重叠时,如何使两个 Html 输入元素可见和可访问?
- html - 即使 localstorage 为空,Angular 也会在加载时显示登录用户
- html - 在 Jupyter NoteBook 中创建单选按钮(Markdown 部分)
- r - 在 R 的 {collapse} 包中,如何实现 dplyr::distinct() 或 base::unique.data.frame() 的作用?
- node.js - 使用时刻将用户定义时间转换为 UTC
- javascript - 如何从“react-navite”中的另一个屏幕调用函数?