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

Vue3 + Tailwind CSS 重复动态网格布局实现问题求助

Vue3 + Tailwind CSS 实现重复动态网格布局问题解决

你这代码的问题出在模板里调用了updateCounter这个会修改响应式状态的函数,每次渲染都会触发状态变化,导致组件无限重渲染、状态混乱,最终布局完全不符合预期。而且原有的条件判断也没把重复布局的逻辑理清楚。

解决办法很简单:先明确你要的重复布局单元,比如假设你要的是每8个元素为一组,前6个在md及以上屏幕占4列,最后2个占6列(刚好填满每行12列),直接根据元素索引计算对应的列跨度类就行,不用修改响应式状态。重构后的代码如下:

<template>
  <div class="min-h-screen flex items-center bg-purple-500">
    <div class="flex-1 max-w-4xl mx-auto p-8">
      <ul class="grid grid-cols-12 gap-8">
        <!-- 这里的16可以改成你需要的总元素数,比如24就是三组 -->
        <li
          v-for="(_, index) in 16"
          :key="index"
          :class="[
            'bg-white rounded-lg shadow-xl',
            'col-span-12 sm:col-span-6',
            index % 8 < 6 ? 'md:col-span-4' : 'md:col-span-6'
          ]"
        >
          <div class="h-24">{{ index }}</div>
        </li>
      </ul>
    </div>
  </div>
</template>

<script setup lang="ts">
// 不需要额外的响应式状态和修改函数
</script>

逻辑说明:

  • 用index % 8拿到元素在重复单元里的位置(0到7)
  • 位置在0-5(前6个元素)时用md:col-span-4,每3个刚好占满一行(3×4=12列),6个元素就是两行
  • 位置在6-7(最后2个元素)时用md:col-span-6,两个元素刚好占满一行(2×6=12列)
  • 全程没修改响应式状态,不会出现渲染混乱,逻辑也一目了然

要是你想要的重复模式不一样(比如单元里的元素数量、列跨度不同),只需要调整index % N里的N(单元总元素数),再修改对应的条件判断就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:35:24