循环引用报错

来源:11-8 searchBar:搜索历史处理

慕运维7493028

2024-05-29

老师,

  1. 我每次输入框中点击回车和搜索按钮,都会出现循环引用和栈溢出的错,而点击提示框中的item就没事,
  2. 同时localStorage中每次只能保存最后一次数据,
  3. 而且localStorage里面为啥没有search/deleteAllHistory的状态,
    该如何解决?
    图片描述
    图片描述
    图片描述
    图片描述
写回答

1回答

Sunday

2024-05-31

你好

报错场景:el-select放在了table的td里,我做的是根据el-select切换的动态表格。切换时就会报此错误。

原因分析:分析发现,本场景在切换select时(实际上是在下拉选项框弹出的情况下),其所在单元格尺寸发生了变化(因为我没有定表格内单元格的尺寸)。

本质原因:选项弹出层依赖监听(window.ResizeObserver)计算尺寸时出了问题。

解决方案共有三种:

  1. 通过以下代码进行处理(节流减少重绘的速度,但是很多情况下效果不明显
    保证el-select所在单元格尺寸不发生变化即可。

可通过如下代码进行处理(直接在 src/plugins/element.js 中引入如下代码)

const _ = window.ResizeObserver
window.ResizeObserver = class ResizeObserver extends _ {
  constructor(callback) {
    callback = debounce(callback, 20)
    super(callback)
  }
}

const debounce = (callback, delay) => {
  let tid
  return function () {
    const ctx = self
    tid && clearTimeout(tid)
    tid = setTimeout(() => {
      callback.apply(ctx, arguments)
    }, delay)
  }
}
  1. 推荐:可以直接在 vue.config.js 文件中增加如下配置:

// vue.config.js

module.exports = {

  devServer: {

     client: {

      overlay: false,

    },

  },

};


0
0

基于 Vue3 ,打造前台+中台通用开发提效解决方案

42 种前台常见业务模型, 15 种中台通用组件,成为前端提效高手

788 学习 · 517 问题

查看课程