咸鱼肥美妖娆 2023-05-12 13:27 采纳率: 44.4%
浏览 35
已结题

vant的tabs加上swipeable或animated属性会出错

vant的tabs加上swipeable或animated属性会出错

        <van-tabs v-model:active="active" sticky animated>
          <van-tab
            v-for="(item, index) in tabs"
            :title="item.title"
            :key="index"
          >
            <TabContent :indexName="index" />
          </van-tab>
        </van-tabs>

第一个tab会给TabContent 组件传入两个indexName 0和1,然后点击第二个tab之后传入的index变成了2 。
而不添加swipeable或animated就不会有这个问题,请问怎么解决呢?
vant的版本是 3.2.47

  • 写回答

1条回答 默认 最新

  • Stephen_112 2023-05-15 17:38
    关注

    来自gpt的回答:
    如果在van-tabs中没有开启swipeable或animated,那么切换标签页时并不会同时渲染所有标签页的内容,而是只会渲染当前激活的标签页的内容。因此,在这种情况下,每个TabContent组件对应的索引值就是唯一的。

    如果在van-tabs中开启了swipeable或animated,那么所有标签页的内容都会被提前渲染出来,并进行缓存,这就导致了当你切换标签页时,由于所有内容都已经渲染出来了,所以不同的TabContent组件实例对应的索引值也可能是相同的,会出现问题。

    为了解决这个问题,你可以考虑将TabContent组件中的indexName属性改为一个计算属性,根据当前激活的标签页动态计算得到,例如:

    <template>
      <div>{{ index }}</div>
    </template>
    
    <script>
    export default {
      props: {
        tabKey: String,
        tabs: Array
      },
      computed: {
        index() {
          return this.tabs.findIndex((item) => item.key === this.tabKey)
        }
      }
    }
    </script>
    
    
    
    

    然后在父组件中将TabContent组件中的indexName属性改为tab.key,例如:

    
    <van-tab
      v-for="(tab, index) in tabs"
      :title="tab.title"
      :key="index"
    >
      <TabContent :tabKey="tab.key" :tabs="tabs" />
    </van-tab>
    
    

    这样,无论是否开启了swipeable或animated,都可以通过tab.key来动态计算得到每个TabContent组件实例对应的索引值,避免出现问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月3日
  • 已采纳回答 7月26日
  • 创建了问题 5月12日

悬赏问题

  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?