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

如何基于可变长度数组实现固定数量的书籍分批加载功能?

书籍分页加载的正确实现方案

你的思路方向没问题,但代码里有几个细节问题导致功能异常,下面是修正后的完整实现:

问题点梳理

  • JSX语法错误:返回的多个元素必须用容器(比如<div>或<>)包裹
  • 未定义fixedItemLength常量,需要明确每页显示10本的数值
  • 未处理书籍总数不足10本的初始显示情况
  • 点击按钮时未判断是否已显示全部书籍,会导致booksShown无意义地增长
  • map循环缺少唯一key,且未传递书籍数据给<Books>组件

修正后的代码

import { useState } from 'react';

function BooksContainer() {
  const fixedItemLength = 10; // 每页固定显示10本
  const totalBooks = booksData.length;
  // 初始显示数量:如果总书籍不足10本,直接显示全部
  const [booksShown, setBooksShown] = useState(Math.min(fixedItemLength, totalBooks));

  const handleShowMore = () => {
    // 计算下一次要显示的数量:不超过总书籍数
    const nextShown = Math.min(booksShown + fixedItemLength, totalBooks);
    setBooksShown(nextShown);
  };

  return (
    <div className="books-container">
      {/* 渲染当前要显示的书籍 */}
      {booksData.slice(0, booksShown).map((book, index) => (
        <Books key={index} book={book} /> // 传递书籍数据,添加唯一key
      ))}

      {/* 只有还有未显示的书籍时,才显示按钮 */}
      {booksShown < totalBooks && (
        <button onClick={handleShowMore}>Show More</button>
      )}
    </div>
  );
}

关键优化说明

  • 初始状态用Math.min确保不会显示超过总书籍数的内容
  • 点击按钮时同样用Math.min控制上限,避免无效的数值增长
  • 按钮仅在有剩余书籍时显示,提升用户体验
  • 补充了JSX的容器包裹,修复语法错误
  • 给map循环添加key,符合React的渲染规范,同时传递书籍数据给子组件

内容的提问来源于stack exchange,提问作者Murtaza Alkabie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:17:10