在vant框架中有一个标签栏,怎样判断在点击每个标签的时候只请求一次数据

问题遇到的现象和发生背景

用keep-alive也不起作用
每次点击按钮还会在获取一次数据

问题相关代码,请勿粘贴截图
<van-tabs swipeable animated @click="btnclick" @change="cha">
<van-tab v-for="(item, index) in arr" :title="item.name" :key="index">

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

你是想点击当前 active 项,不去请求后台吗?还是在一开始就将所有数据全部加载出来 点击不请求呢?
从代码上看的话 你绑定了两个事件,你是不是在这两个事件里面做了请求操作呢?

你这又有@click 又有@change 当然点一下就请求一下 你不想请求数据就把这两个方法都去掉 mounted的时候就把数据加载到arr里

看描述不是很明确,如果你想点击的第一次请求,后面点击不请求的话。我给的思路是:定义一个变量isFirst = true,
@click="btnclick"在这里点击的方法里面加一层嵌套判断是否第一次请求。请求之后把isFirst = false。这样的话只会请求一次,后面isFirst为false就不会走if里面了。

btnclick(){
if(isFirst){
....请求方法;
之后isFirst = false
}
}


用变量控制,比如初始化个变量  isFirst:true

那么tabs绑定的@change="onChange"  事件里判断isFirst再发起请求

onChange(){

  if(this.isFirst) 发起请求

}

----------

但是,我不明白你的需求,你是在每个tab页里放了个子组件吗,我觉得你是在@change事件里请求了数据传给了子组件,所以每次点击都会请求。

你最好把请求放到子组件的mounted生命周期里,这样怎么切换它也只会请求一次

 

如有帮助,麻烦点个[采纳此答案]谢谢