VUE3使用ref绑定动态DOM元素;ref使用函数时动态修改数据出现重复;数据量大时会很卡;巧用nextTick();

我先直接贴代码:其他是项目抽的组件配置,只需要关注:

:ref="(el) => setItemRefs(el as HTMLElement, propsTable.row.language)"
              <FileUpload
                v-show="propsTable.row.pic_urls?.length > 0"
                :ref="(el) => setItemRefs(el as HTMLElement, propsTable.row.language)"
                :key="propsTable.rowIndex"
                v-model:img="propsTable.row.pic_urls"
                :hid-upload="true"
                :configuration-info="imgConfigurationInfo"
                @on-rejected="rejectedFun"
              >
              </FileUpload>

下面函数的代码:


const itemRefs: Ref = ref([]);
const setItemRefs = (
  el: HTMLElement | ComponentPublicInstance | HTMLAttributes,
  languageKey: string
) => {
  nextTick(() => {  // 直接在don更新之后再去push
    if (el) {
      itemRefs.value.push({
        languageKey,
        el,
      });

      // 下面代码是去重的,当然可能在上面判断在push,也可以直接用下标替换的方式  
      itemRefs.value = Array.from(
        new Map(itemRefs.value.map((obj) => [obj.languageKey, obj])).values()
      );
    }
  });
};

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值