React组件侦听滚轮滚动:
componentDidMount() {
this.refs.holder.addEventListener('mousewheel', this.handleScroll);
}
并对此做出反应:
handleScroll(e) {
switch (e) {
case e.deltaY > 0:
console.log('positive');
default:
console.log('negative');
}
if (e.deltaY > 0) {
console.log('positive');
} else {
console.log('negative');
}
}
if / else语句可以正常工作,但不适用于switch,能解释一下原因吗?
答案 0 :(得分:1)
这与React无关。切换声明不会那样工作。您正在将e.deltaY > 0
与e
的结果进行比较,这将永远不会匹配。 e.deltaY > 0
始终为true
或false
。 e
是一个事件对象,永远不会是true
或false
。你可以这样做......
switch (e.deltaY > 0) {
case true:
console.log('positive');
break;
default:
console.log('negative');
}
我建议您使用简单的if
语句,因为您的唯一案例是true
和false
答案 1 :(得分:1)
来自文档Switch
switch语句首先计算其表达式。然后查找 第一个case子句,其表达式的计算结果与输入表达式的结果相同(使用严格比较,===)并将控制转移给它
typeof e === typeof (e.deltaY > 0 ) //sometime true and sometime false
e === (e.deltaY > 0 ) //sometime true and sometime false
每次===
都会给出不同的结果,而您将无法获得预期的结果