为什么判断数组长度执行逻辑时ESLint报no-unused-expression错误?
报错根因
no-unused-expressions ESLint规则的作用是禁止执行无返回值消费的独立表达式,避免无用代码或者逻辑书写错误。
你当前的写法直接将三元运算符作为独立语句使用,没有接收和使用三元运算的返回值,恰好触发了该规则校验:三元运算符本质是表达式,设计上是用来根据条件返回对应值的,不是用来替代if-else做纯副作用的分支执行的,这种场景下三元运算的返回值完全没有被用到,自然会被规则判定为无效表达式。
额外提一个你代码里的性能问题:你把dispatch(setTotal(totalPrice))写在了forEach循环内部,当cart存在多个商品时,每遍历一个商品就会触发一次dispatch,属于不必要的重复执行,完全可以算完总价后再统一执行一次dispatch。
推荐优化写法
useEffect(() => { // 用reduce直接计算总价,cart为空时会直接返回初始值0 const totalPrice = cart.reduce((sum, item: AsideItemInterface) => { return sum + item.quantity * item.price }, 0) dispatch(setTotal(totalPrice)) }, [cart]);
上面的写法不需要手动判断cart是否为空,逻辑更简洁,也不会触发ESLint报错。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

