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

React中数组所有项展示后隐藏Load More按钮的实现问题

解决Load More按钮无法隐藏的问题

你的问题出在按钮的显示判断逻辑上——当前用items ? ... : ...,但items始终是一个数组(哪怕已经加载完所有数据),所以这个条件永远为真,按钮会一直显示。

正确的判断逻辑应该是检查当前展示的条目数是否小于总数据条数,也就是用items.length < releases.length来控制按钮的显示:

修改后的核心代码部分

// 替换原来的按钮渲染代码
{items.length < releases.length && (
  <button onClick={loadMore} className="btn">show more</button>
)}

另外,为了避免状态更新的闭包问题(比如连续点击按钮可能导致数据加载异常),建议把loadMore函数改成函数式更新的写法:

const loadMore = () => {
  setItems(prevItems => [...prevItems, ...releases.slice(prevItems.length, prevItems.length + STEP)]);
};

完整修改后的组件代码

import { useState } from 'react'
import releases from "../data/releases.json";
import styled from 'styled-components';
import { Link } from 'react-router-dom';
import '../main.css'

const Release = () => {
  const STEP = 12;
  const [items, setItems] = useState(releases.slice(0, STEP));

  const loadMore = () => {
    // 用函数式更新获取最新的prevItems状态
    setItems(prevItems => [...prevItems, ...releases.slice(prevItems.length, prevItems.length + STEP)]);
  };

  return (
    <Wrapper>
      <div className="release fadein">
        {items.map((item, i) => (
          <div className="item" key={i}>
            <Link to={`/release/${item.id}`}>
              <img src={item.imageURL} alt={item.artist} />
            </Link>
          </div>
        ))}
        {/* 正确的显示判断逻辑 */}
        {items.length < releases.length && (
          <button onClick={loadMore} className="btn"> show more </button>
        )}
      </div>
    </Wrapper>
  )
}

这样当所有数据都加载完成后,items.length会等于releases.length,按钮就会自动隐藏,不需要渲染一个空的隐藏按钮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:57:33