SonarLint规则Javascript:S1121报错咨询——Slider组件numberImg赋值问题
SonarLint Javascript:S1121报错原因及修复
报错原因
Javascript:S1121规则核心是禁止在表达式中使用赋值操作——这种写法要么是手滑把判断符===写成了赋值=,要么是在不该有副作用的地方修改变量,既降低代码可读性,还可能埋下逻辑隐患。
你写的setShowPicture(numberImg = 0)存在两个问题:
- 完全没必要修改
numberImg的值:它本来是存储图片总数的变量,改成0之后,后续判断是否显示箭头的numberImg > 1逻辑会直接失效,只是当前组件还没触发这个问题而已。 - 在
setShowPicture的参数里做赋值属于多余的副作用操作,其他开发者看代码时会疑惑你到底是要更新轮播状态,还是要修改图片总数。
修复方案
直接把0传给setShowPicture,不要碰numberImg:
const imgNext = () => { if (showPicture === numberImg - 1) { setShowPicture(0); // 直接传0,无需修改numberImg } else { setShowPicture(showPicture + 1); } };
顺便给你两个小优化建议:
- 删掉
imgPrevious和imgNext里的return (setShowPicture);:这行完全没用,setShowPicture的返回值是undefined,return它没有任何意义。 - 把
let numberImg = images.length;改成const numberImg = images.length;:图片总数不会变化,用const更符合变量语义。
修复后的完整前后切换函数:
const imgPrevious = () => { if (showPicture === 0) { setShowPicture(numberImg - 1); } else { setShowPicture(showPicture - 1); } }; const imgNext = () => { if (showPicture === numberImg - 1) { setShowPicture(0); } else { setShowPicture(showPicture + 1); } };
内容的提问来源于stack exchange,提问作者ArgoZen
相关产品推荐
相关产品推荐

