从FlatList删除条目时触发TypeError:(0, _activities.default)不是函数
解决删除Activity时的TypeError问题
嘿,我看到你在给自定义ActivityItem组件的FlatList添加删除功能时遇到了TypeError: (0, _activities.default) is not a function错误,这问题主要出在两个关键地方:导入方式错误和reducer中处理数组的逻辑错误,下面一步步帮你修复:
1. 修复Action常量的导入错误
在你的store/reducers/activities.js里,你用了默认导入来获取REMOVE_ACTIVITY常量,但在actions文件里它是命名导出的,这会导致REMOVE_ACTIVITY的值不是你预期的字符串常量,反而可能是整个模块对象,进而引发调用错误。
把reducer里的导入语句改成这样:
// 替换原来的错误导入 import { REMOVE_ACTIVITY } from '../actions/activities';
2. 修复Reducer中处理userActivities的逻辑
你的userActivities是一个数组(初始状态里是ACTIVITIES.filter()返回的数组),但你现在的代码把它当成对象来处理(用{...state.items}展开,然后delete属性),这完全不对:
- 首先
state里根本没有items这个属性,你应该操作的是state.userActivities - 数组不能用
delete操作来删除元素,正确的做法是用filter方法过滤掉要删除的项
把reducer的case REMOVE_ACTIVITY部分改成这样:
case REMOVE_ACTIVITY: // 过滤掉id匹配的activity,返回新数组(符合redux的immutable要求) const updatedUserActivities = state.userActivities.filter( activity => activity.id !== action.id ); return { ...state, userActivities: updatedUserActivities };
3. 检查removeActivity的导入是否正确
另外,那个(0, _activities.default) is not a function错误通常意味着你在TravelScreen里导入removeActivity时用了默认导入,但它是命名导出的。请确保你的导入语句是:
// TravelScreen.js里的正确导入 import { removeActivity } from '../store/actions/activities';
而不是这种错误的默认导入:
// 不要用这种方式导入 import removeActivity from '../store/actions/activities';
把这些修改完成后,你的删除功能应该就能正常工作了,不会再出现那个TypeError啦!
内容的提问来源于stack exchange,提问作者blakebullwinkel
相关产品推荐
相关产品推荐

