关于eslint误报Unexpected side effect in “getCheckedData“ computed property的问题

news/2024/7/19 14:57:12 标签: javascript, eslint, js, 前端

eslintUnexpected_side_effect_in__computed_property_0">关于eslint误报Unexpected side effect in “” computed property的问题

eslint_1">先说结论,我没有在computed中修改任何页面变量,这属于eslint监测机制的误判报错。

好的现在进入正文。

起因:

我在eslint中设置了no-side-effects-in-computed-properties,
这个属性会检测开发人员是否在computed中改变了页面变量的值,
因为这种做法并不推荐所以会报错,
若有此需要,建议在watch中执行。

问题表现:

在这里插入图片描述
其中tool是一个挂载在VUE原型链上的工具对象
在这里插入图片描述
其本身包含的是一些通用方法,spliceString就是其中之一,源码如下
在这里插入图片描述
可以看到我并没有在computed中修改页面变量的值,那么为什么Eslint还会给我报错呢。
所以我去翻看了Eslint的源码。

寻找问题的根源

在Eslint包内的no-side-effects-in-computed-properties.js文件中,我找到了这么一段
在这里插入图片描述
可以看到当findMutating方法返回值满足条件是,Eslint就会向我们报刚刚看到的错,所以我又去寻找这个findMutating方法。
终于找到了万恶之源:
在这里插入图片描述
很明显,按照这个方法的逻辑,我们的这段代码最终会走到调用表达式的判断中,也就是上图红框中的代码段。

真相大白

Eslint会对所谓的callName做判断,如果name中包含push|pop|shift|unshift|reverse|splice|sort|copyWithin|fill这些字符串,则会返回并报错。
因为这些数组或者字符串的方法会改变变量的值,这是在规则中不允许的。
再返回去看我们的callName
在这里插入图片描述
包含了splice字符串,所以Eslint才会给我们报错。

解决

解决方法目前有几种,
1.对改行禁用Eslint校验,// eslint-disable-line
在这里插入图片描述
2.换一个方法名,不要包含push|pop|shift|unshift|reverse|splice|sort|copyWithin|fill这些字眼。
在这里插入图片描述
3.自行修改Eslint的源码中的校验规则(不推荐)
4.不要将tool整个挂载到vue原型链上,而是需要的时候再引入。


http://www.niftyadmin.cn/n/1355232.html

相关文章

美化你的console,为它添加样式

美化你的console,为它添加样式 需求: 输出带有样式的consloe,例如 实现: console.log(%c version %c 1.0.0 ,background:#35495e ; padding: 1px; border-radius: 3px 0 0 3px; color: #fff,background:#41b883 ; padding: …

登录python自动化_python自动化实现验证码登录过程

(自动化实现验证码登录,这里内容是入坑后,整合了几个文档的内容)| 以下模块是使用时需要用到的首先:安装pillow库,它的作用是对图片进行简单的处理,在pytharm中使用pip install pillow指令即可安…

box-reflect应用

box-reflect应用 语法 box-reflect&#xff1a;none(无倒影) | <direction> <offset> <mask-box-image> <direction> above | below | left | right&#xff08;倒影方向&#xff0c;上、下、左、右&#xff09; <offset> <length> …

python redis命令zadd_一日一技:【重要】redis-py最新版本zadd方法参数有变

在Python中操作Redis数据库&#xff0c;我们一般使用的第三方库为redis-py。 在redis-py 3.0之前&#xff0c;如果我需要添加一个有序集合的值&#xff0c;我是这样写的代码&#xff1a;import redis client redis.Redis() client.zadd(key, value1, score1, value2, score2) …

char强制类型转换为int_软件特攻队|static_cast,C++强制类型转换操作符

C中总共有四个强制类型转换操作符&#xff1a;reinterpert_cast、static_cast、const_cast、dynamic_cast。强制类型转换&#xff0c;也称为显式转换&#xff0c;接下来我们讲讲static_cast这个强制类型转换操作符。编译器隐式执行的任何类型转换都可以由static_cast来完成&…

火狐浏览器兼容鼠标滚轮事件

火狐浏览器兼容鼠标滚轮事件 起因&#xff1a; this.$refs.canvasDivBox.addEventListener(mousewheel, this.zoomInOrOut, false); 这段代码在chrome中运行正常&#xff0c;但是到firefox中时则不会被触发。 原因&#xff1a; firefox不支持mousewheel&#xff0c;请使用…

js和python交互_python和js能交互吗

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; 对于表单提交&#xff0c;后台可以用srequest.form.get(username,none)来捕捉前端网页的值。 但是如果是非表…

微信小程序Toast在ios上的兼容性问题

微信小程序Toast在ios上的兼容性问题 表现 微信小程序和uni的Toast&#xff0c;弹出纯文本提示消息的时候有一个兼容问题&#xff0c;只展示两行。 在ios上的最大宽度比安卓小&#xff0c;当文字过多的时候会展示不全。 原因 微信小程序对Toast进行了字数限制&#xff0c;最…