You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 10:42:37