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

Vue3+Pinia实现点击加载更多项目无法获取数据问题排查

问题根因

列表渲染失败是两个基础写法错误导致的:

  • 核心错误:Pinia返回的store是响应式代理对象,访问其挂载的state属性不需要加.value——只有手动用ref()定义的响应式变量才需要通过.value读写。你写的storeProjects.projects.value是在数组对象上找不存在的value字段,拿到的是undefined,对undefined调用slice()会直接抛出JS运行时错误,整个组件渲染中断,自然看不到列表。
  • 附带问题:模板里v-for没绑定唯一key,而且直接渲染整个project对象,就算逻辑跑通也会出现[object Object]的异常渲染结果;点击事件里直接对ref做运算虽然模板能自动解包,但可维护性差,也没做加载边界判断,项目加载完后点按钮还会做无意义的数字累加。
修复步骤
  1. 修正计算属性的取值逻辑,去掉projects后面多余的.value,注意手动定义的maxProjectsShown是ref类型,取值需要加.value:
const visibleProjects = computed(() => {
  return storeProjects.projects.slice(0, maxProjectsShown.value);
});
  1. 把加载更多的逻辑抽成独立方法,加上边界判断,避免无效累加,同时兼容最后一次加载步长超过剩余项目数的场景:
const loadMore = () => {
  const total = storeProjects.projects.length;
  if (maxProjectsShown.value >= total) return;
  maxProjectsShown.value = Math.min(maxProjectsShown.value + step.value, total);
};
  1. 修改模板,给v-for绑定唯一key,按需渲染项目的具体字段,按钮加显示判断,加载完所有项目后自动隐藏:
<div
  class="app__projects__container"
  v-for="project in visibleProjects"
  :key="project.id"
>
  <!-- 按需渲染项目的具体字段 -->
  <h3>{{ project.name }}</h3>
  <p>{{ project.description }}</p>
</div>

<div class="app__projects__showMoreButton">
  <button 
    v-if="maxProjectsShown < storeProjects.projects.length"
    @click="loadMore"
  >
    展示更多项目
  </button>
</div>

改完即可正常渲染列表,点击按钮也能按设定步长加载更多项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:33:12