为了账号安全,请及时绑定邮箱和手机立即绑定

Infinitegrid 重复 API 调用

Infinitegrid 重复 API 调用

有只小跳蛙 2023-07-14 15:24:53
我使用vue-infinitegrid并且在浏览器中意识到后端 API 被调用了 3 次。首先是一些代码(git):<GridLayout  ref="ig"  :options="options"  :layoutOptions="layoutOptions"  @append="onAppend"  @layout-complete="onLayoutComplete"  @image-error="onImageError">  <div slot="loading">Loading...</div>  <div class="item" v-for="(item) in list" :key="item.key">    <ViewItem :item="item"/>  </div></GridLayout>data() {  return {    start: 0,    loading: false,    list: [],    isEnded: false,    options: {      isOverflowScroll: false,      useFit: true,      useRecycle: true,      horizontal: false,      align: 'center',      transitionDuration: 0.2,    },    layoutOptions: {      margin: 15,      align: 'center',    },    pageSize: 3,  };},methods: {  async onAppend({ groupKey, startLoading }) {    this.$log.debug(`onAppend group key = ${groupKey}`);    const { list } = this;    if (this.isEnded) return;    const items = await this.loadItems();    startLoading();    this.list = list.concat(items);  },  async loadItems() {    const start = this.start || 0, size = parseFloat(this.pageSize), { tag } = this;    this.$log.debug(`loadItems start = ${start}, size = ${size}`);    let res = await this.$store.dispatch('GET_ITEM_STREAM', { start, size, tag });    if (res.length === 0) { // todo or smaller than requested      this.$log.debug('loadItems no data');      this.isEnded = true;      this.$refs.ig.endLoading();      return res;    }    if (this.exceptItem) {      res = res.filter(item => item._id !== this.exceptItem._id);    }    this.start = start + res.length;    this.$log.debug('loadItems finished');    return res;  },  onLayoutComplete({ isLayout, endLoading }) {    this.$log.debug(`onLayoutComplete isLayout = ${isLayout}`);    if (!isLayout) {      endLoading();    }  },我可以看到它在调用start后增加。onAppend看起来像一些并发问题,无限网格组件不会等到 REST 调用完成并触发新事件。有没有人对此组件有任何经验,并且知道当我需要等待后端响应时如何处理这种情况?
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

在startLoading和endLoading中,加载栏出现和消失,并且一些功能暂时禁用(moveTo、useFit)。

附加和前置工作有效,必须通过 isProcessing 方法来阻止。

onAppend({ groupKey, startLoading, currentTarget }) {
    if (currentTarget.isProcessing()) {
            return;
    }
}


查看完整回答
反对 回复 2023-07-14
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信