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

React健身网站开发:exercises.slice不是函数错误求助

解决exercises.slice is not a function错误

这个错误的核心原因是**exercises不是数组类型**,slice()是数组专属方法,只有当exercises为数组时才能正常调用。以下是具体排查和修复方案:

1. 给Props设置默认空数组

组件初始化阶段,父组件可能尚未传递有效数据,或者初始值不是数组。直接在解构Props时给exercises设置默认空数组:

const Exercises = ({ exercises = [], setExercises, bodyPart }) => {

2. 添加类型检查,确保调用slice()前是数组

计算分页数据时,先判断exercises是否为数组,避免非数组类型调用方法报错:

const currentExercises = Array.isArray(exercises) 
  ? exercises.slice(indexOfFirstExercise, indexOfLastExercise) 
  : [];

同时,渲染分页组件时也增加数组检查,避免读取非数组的length属性报错:

{Array.isArray(exercises) && exercises.length > 9 && (
  <Pagination
    color="standard"
    shape="rounded"
    defaultPage={1}
    count={Math.ceil(exercises.length / exercisesPerPage)}
    page={currentPage}
    onChange={paginate}
    size="large"
  />
)}

3. 验证API返回数据格式

检查fetchData函数的返回值,确保它返回的是数组。如果API返回的是包含数组的对象(比如{ data: [...] }结构),需要修改fetchExercisesData里的赋值逻辑,提取出数组部分:

// 示例:如果API返回包裹在data字段中的数组
exercisesData = (await fetchData(url, exerciseOptions)).data;

4. 排查父组件的初始值

确保父组件中exercises的初始状态是数组类型:

// 父组件中初始化state
const [exercises, setExercises] = useState([]);

为什么转字符串的尝试无效?

虽然字符串也有slice()方法,但你需要的是对数组进行分页操作,将exercises转为字符串后,它变成了字符串类型,既无法实现数组分页逻辑,也不符合后续map渲染组件的需求,所以这个方向完全错误。

内容的提问来源于stack exchange,提问作者hamza malik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:07:48